Текущее время: 18 окт 2017, 11:13


О сравнении действительных чисел.

О сравнении действительных чисел.

Сообщение HAMMER » 13 фев 2011, 17:41

В силу специфики формата хранения чисел с плавающей запятой непосредственное сравнение действительных чисел может привести к ошибкам при выполнении кода. Допустим, имеется числа 1.29999999 и 1.30000001. Практически ода эти числа равны 1.3. Но если их сравнить при помощи оператора равенства, то, естественно результат будет отрицательным. Поэтому действительные числа необходимо сравнивать с учетом заданной точности. Делается это следующим образом. Объявляется константа задающая необходимую точность вычислений. После чего все сравнения производятся при помощи этой константы. При этом считаем, что все числа равные или меньшие заданной константы равны нулю.

Код: Выделить всё
    Const Epsilon As Double = 0.000001
    ' ...
    ' Равенство двух чисел
    If Abs(nDouble1 - nDouble2) <= Epsilon Then
    ' ...
    ' Равенство числа нулю
    If Abs(nDouble) <= Epsilon Then
    ' ...
    ' Сравнение двух чисел
    ' При выполнении условия, первое число больше второго
    If nDouble1 - nDouble2 > Epsilon Then
АКЦИЯ: Каждому флудеру/оффтопщику - день бана в подарок! Приведи с собой друга и отгреби за двоих!

VIP группа на форуме BestCoding.info

FAQ по SEO (постепенно пополняется)
Мой любимый форум phpBB

HAMMER

Автор темы
Аватара пользователя
Администратор
 
Сообщения: [ 930 ]
Зарегистрирован: 20 янв 2011, 13:54
Откуда: Зеленоград
Благодарил (а): 9 раз.
Поблагодарили: 85 раз.

Вернуться в Visual Basic

Кто сейчас на конференции

Зарегистрированные пользователи: нет зарегистрированных пользователей

cron