Есть интересный вопрос о Facebook, с которым я столкнулся. Он спрашивает, что он использует MATLAB R2014a (64-разрядная версия) и побежал этот код: -Зачем исправить ((20.45-20) * 60) не равно с исправлением ((20) * 60) в MATLAB
x = 0.45;
min = fix((x)*60);
fprintf('min = %d \n', min);
x = 20.45
min = fix((x-20)*60);
fprintf('min = %d \n', min);
Результаты следующие:
>> tx
min = 27
min = 26
, которые неверны, потому что (20.45 - 20) должны дать тот же результат, что и 0,45, но это не так.
Он также пытался% f, но он все же дал тот же результат.
Сначала я думал, что это проблема с хранением с плавающей запятой, но после того, как я ее вычислил, это не был правильный ответ.
Итак, я думаю, что этот вопрос интересен и сложный. Может ли кто-нибудь помочь мне объяснить, как это происходит?
Спасибо!
Да, это ошибка хранения плавающей запятой. '0.45' не' 20.45-20' –
Полезная лекция: https://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html – liori
Самый близкий к 0.45 - 0.450000000000000011102230246251565404236316680908203125, немного больший, чем точный , Самый близкий к 20.45 - 20.449999999999999289457264239899814128875732421875, немного меньше точного. 20.45-20 оценивается как: 0.449999999999999289457264239899814128875732421875 –