Исходные данные (float): level = -17.0, h = 0.84
Результат: level/100 + h = 0.6699999999999999
Вопрос: как без округлений получить очевидное 0,67? Я же не на нечетное делю. В чем проблема?
Исходные данные (float): level = -17.0, h = 0.84
Результат: level/100 + h = 0.6699999999999999
Вопрос: как без округлений получить очевидное 0,67? Я же не на нечетное делю. В чем проблема?
Чтобы работать без округлений, переходите к целым числам. Если вам нужна точность представления два знака после запятой, то умножьте все ваши числа на 100 и преобразуйте в целые. Проводите нужные операции и храните в памяти целые числа. При выводе куда-то (для человека, в файл для обмена) делите на 100.
0.67в формате binary64 IEEE 754 не представимо. Два ближайших вещественных числа, которые можно представить точно в данном формате — это0.67000000000000003996802888650563545525074005126953125и0.6699999999999999289457264239899814128875732421875. См. Вычисления на числах с плавающей точкой работают неправильно. – wololo Oct 21 '23 at 21:15