Perl по модулю операторский вопрос
Почему первый пример выводит неверный результат?
perl -le 'print $x = 100*1.15 % 5'
4
perl -le 'print $x = 1000*1.15 % 5'
0
2 ответа
Решение
Это из-за арифметики с плавающей точкой.
print $x = int(100*1.15);
Дает вам 114.
Завершают. Имейте в виду, что компьютеры не могут точно представлять реальные десятичные разряды - они приближаются. На моем компьютере, perl -le 'print $x = (100*1.15)-115'
дает результат -1.4210854715202e-14
, Который означает, что 100*1.15
почти, но не совсем, 115.