Сравнение чисел double - ошибка !? - страница 3

 
Mikhail Mitin:

Числа Double - числа с плавающий запятой, пример как это работает:

  • вы пишите double a = 1.222, b = 1.222; и думаете, что они равны,
  • но на самом деле, там может быть: a = 1.21999999999   и    b = 1.222000001   и значение a==b не будет Истиной
  • при этом вы можете написать следующий строкой: double c = a   и    при следующей проверке (a==c) это тоже может не быть истиной


Я сравниваю double так:

  1. я нормализую оба числа: NormalizeDouble(a, _Digits)
  2. сравниваю их разность


Как-то один опытный программист (с опытом 20+ лет) сказал мне, что в безотказных крупных системах (конкретно он пишет софт для нефтезаводов) уходят от типа double в пользу int, потому что с int такой ситуации невозможно

Что-то преувеличивате, если числа были получены одим и тем же путём, то никакой разницы там не будет. И "при этом вы можете написать следующий строкой: double c = a   и    при следующей проверке (a==c) это тоже может не быть истиной" неверно.

 
vlad-mir:

Спасибо кто посоветовал преобразовать число в int - помогло только это.

Это помогло не само по себе, а постольку поскольку все вычисления были вынесены за пределы if {...}

что и предлагалось сделать здесь без ненужных преобразований в int