Сегодня я делал упражнения по университетскому программированию и подошел к этой странной вещи. Я хотел бы знать, может ли кто-нибудь объяснить мне, что здесь происходит.Действительно странное взаимодействие с числами
Это вещь, которую я закодированы, чтобы показать:
program problema;
var
a : real;
b : real;
begin
a := 1 - 0.8 - 0.2;
b := 1 - 0.2 - 0.8;
write(a);
writeln(b);
end.
В то время как я ожидал, что он возвращает 0, в обоих случаях, это на самом деле возвращает -1.3 ... на первый и 0 на второй , Как это возможно?
Возможный дубликат [Является ли математика с плавающей запятой?] (Http://stackoverflow.com/questions/588004/is-floating-point-math-broken) – JJJ
Обратите внимание, что это не -1,3 ... но -1,3 ... E-020, который составляет -0,000 ... 13 (с 20 нулями). – JJJ
Он оценивается как -5.55111512313e-17 в PHP и на моем настольном калькуляторе Fedora. Так что это широкий симптом компьютерной математики, а не просто паскаль. :) См. Это для ссылки на точный номер: http://matlab.wikia.com/wiki/FAQ#Why_is_0.3_-_0.2_-_0.1_.28or_similar.29_not_equal_to_zero.3F – SomeDude