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.

Другие вопросы по тегам