Tushar Suradkar Ответов: 1

Сравните числа с помощью math. round


Я использую VB.Сеть для сравнения двух чисел с точностью до 4 знаков после запятой.

Дим поля num1, как дважды = 12.34562
Dim Num2 as Double = 12.34567

Вопрос (1) Какой из этих методов будет правильным использовать:

''------------------------------------------

Если Математика.Round (Num1, 4) >= Math.round(Num2, 4) тогда
...
Конец, Если

''----- ИЛИ -----

Частное Значение Точности Как Double = 0.0001

Если Math. Abs (Num1 - Num2) <= AccuracyValue, то
...
Конец, Если

''-------------------------------------------

Иначе, каким должен быть правильный способ сравнения двух чисел в пределах диапазона точности ?

Вопрос (2) Что делать, если эти два числа
12.3456789 и
12.3456782

где десятичная часть намного больше требуемой точности.
Будет использовать математику.Круглый будет в безопасности ?

Что я уже пробовал:

Если Математика.Round (Num1, 4) >= Math.round(Num2, 4) тогда
...
Конец, Если

1 Ответов

Рейтинг:
1

Jochen Arndt

1) Сравнение Абсолюта разности с величиной величины (часто обозначаемой ε-маленькой греческой буквой Эпсилон) является распространенным методом:

diff = num1 - num2
if (abs(diff) <= epsilon)
    # numbers are similar
else
    # may use sign of diff here to check if larger or smaller
Этот метод также намного быстрее, чем сравнение округленных значений.

2)
Дополнительные цифры игнорируются. В вашем примере оба значения будут округлены до 12.3457.


Tushar Suradkar

Спасибо тебе, Йохен,что заглянул.
Это рассеяло многие сомнения и дало критическое понимание.