LINUX.ORG.RU

php float

 


0

1

for($i=0.5;$i<6.0;$i+=0.1) printf(«%.1f\n»,$i); Почему печатается 6.0 ?

Спс.



Последнее исправление: kdev (всего исправлений: 1)

http://php.net/manual/ru/language.types.float.php

Сравнение чисел с плавающей точкой

Как указано выше, проверять числа с плавающей точкой на равенство проблематично из-за их внутреннего представления. Тем не менее, существуют способы для их сравнения, которые работают несмотря на все эти ограничения.

Для сравнения чисел с плавающей точкой используется верхняя граница относительной ошибки при округлении. Эта величина называется машинной эпсилон или единица округления(unit roundoff) и представляет собой самую маленькую допустимую разницу при расчетах.

$a и $b равны до 5-ти знаков после запятой.


<?php
$a = 1.23456789;
$b = 1.23456780;
$epsilon = 0.00001;

if(abs($a-$b) < $epsilon) {
    echo "true";
}
?>
anonymous
()

При сравнении float нельзя ожидать детерминированного поведения на границе. Если нужна точность, делай цикл по интам 5..60 и дели на 10. Или сравнивай c 6.05, но в любом случае при сумммировании float'ов ошибка накапливается.

slovazap ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.