минус ноль

AmdY

Пью пиво
Команда форума
минус ноль

только что столкнулся с ситуацией когда вылезло число -0 и оно равно нулю (zerkms верно меня поправил именно, из-за равенства у меня и вылез баг)
Код:
php -r "var_dump((-0)=0);";
bool(true)
 

AmdY

Пью пиво
Команда форума
интересный баг о странной цифре, у меня высчитывалась экономия и она получилась минус ноль. по правилам экономия может быть от 0 до 99%, а выводилась -0, потому что это число прошло проверку if ($saving >= 0)
var_dump($saving) выдаёт float -0
может кому-то поможет не наступить на те же грабли
 

Dovg

Продвинутый новичок
не хочу показаться занудой, но код из первого поста приведет к fatall error :)
 

zerkms

TDD infected
Команда форума
Dovg
это уже не принципиально :))))
традиционно первый пост на клубе задаёт вектор дискуссии, а дальше уже все на середине страницы забывают о чём дискутируют :)
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
Профессионал считает долгом тестировать код перед публикацией и думать о теме.

Вы забиваете на тестирование, забываете тему и засираете эфир, но это не общее правило.

-~{}~ 20.09.09 00:00:

AmdY
какие мат. действия привели к получению значения -0 ?
 

AmdY

Пью пиво
Команда форума
grigori
PHP:
//$currenPrice =  string '2101.00' (length=7)
//$realPrice = string '2099.00' (length=7)
$saving = round(100 - 100*$currenPrice/$realPrice);
 

FractalizeR

Новичок
Хм... Действительно
PHP:
<?php

$currenPrice =  '2101.00';
$realPrice = '2099.00';
$saving = round(100 - 100*$currenPrice / $realPrice);

var_dump($saving);
echo($saving);
Код:
float(-0)
-0
 

Lightning

Трудоголик
А я то думал числа целые...
Можно считать это багом конечно, но это не странный баг. Это связано со спецификой работы FPU проца. Для чисел с плавающей точкой существует 0 и -0. Другое дело, что PHP не должен этого показывать.

-~{}~ 21.09.09 20:21:

http://www.wasm.ru/article.php?article=edfpu01

4.1. Ноль

Не все числа можно представить в нормализованном виде. Это достаточно очевидно, хотя бы потому, что есть такое число как 0. Его представление в расширенной точности: нулевая мантисса и порядок, в то время как мы сказали, что старший бит всегда должен быть равен 1. Интересно отметить, что в FPU существует два нуля, и это является математически корректным. Есть +0 и -0. Далее мы узнаем, что FPU не только способно содержать +/-0, но и образовывать +/-0 при арифметических ситуациях.
 
Сверху