Я собираюсь кипятить эту проблему вплоть до простейшей формы:Как использовать FMOD и избежать проблем с точностью
Переберет из [0 .. 5,0] с шагом 0,05 и распечатать «X ' для каждого умножителя 0,25.
for(double d=0.0; d<=5.0; d+=0.05) {
if(fmod(d,0.25) is equal 0)
print 'X';
}
Это, конечно, не работает, так как d
будет [0, +0,05000000001, 0,100000000002 ...] вызывает FMOD() потерпеть неудачу. Экстремальный пример: d=1.999999999998
и fmod(d,0.25) = 1
.
Как справиться с этим? Here is редактируемый онлайн-пример.
Если размер шага ('0.05 здесь) может быть представлен как' 2 ** x' (** == поднят до), вы вряд ли получите '==' для float/double variables/расчеты. – anishsane