Поясните применение (float) к microtime()

Роберт

Аналитик
В документации к РНР есть пример функции:
PHP:
function getmicrotime(){ 
    list($usec, $sec) = explode(" ",microtime()); 
    return ((float)$usec + (float)$sec); 
    }

Не могу понять - зачем тут (float)?
Ведь если без него: return ($usec + $sec);
Результат такой же...
Какой смысл в данном примере от (float)?
 

Роберт

Аналитик
Про microtime(true) я знаю (я же говорю - пример из документации)
Просто пытался понять зачем в примере (float)?
Как-то считал что лишнее они не будут писать.
 

Фанат

oncle terrible
Команда форума
ой. В мануале-то как раз ДОХРЕНА ерунды написано.

Варианта я представляю себе два
либо в какие-то стародавние времена была какая-то стародавняя бага, которая требовала такого вот шаманства
либо пример писал нубас, из тех, что пишут переменные в кавычках, "шоб було"
 

Роберт

Аналитик
А какое количество эффективных символов после запятой в микросекундах?

Запускаешь любой пример из мануала и получаешь что твоя программа выполняется скажем за 0.000114358734985345 (кажется - "Вау! Какая точность!")
Выполнишь: echo number_format(microtime(true),15,',',' ')
Получишь: 1 367 943 514,922028064727783 (опять же кажется что большая точность)
А если взять только первое значение из microtime() (без True) то получишь что-то типа 0.00014400
И понимаешь что лишние цифры получаются из-за неточностей вычисления значений с плавающей запятой.
Например:
PHP:
         list($usec, $sec) = explode(" ",microtime()); 
         echo "<br>", number_format((float)$usec, 15, ',', ' '); 
         echo "<br>", number_format(((float)$usec+1        ), 15, ',', ' '); 
         echo "<br>", number_format(((float)$usec+11       ), 15, ',', ' '); 
         echo "<br>", number_format(((float)$usec+111      ), 15, ',', ' '); 
         echo "<br>", number_format(((float)$usec+1111     ), 15, ',', ' '); 
         echo "<br>", number_format(((float)$usec+11111    ), 15, ',', ' '); 
         echo "<br>", number_format(((float)$usec+111111   ), 15, ',', ' '); 
         echo "<br>", number_format(((float)$usec+1111111  ), 15, ',', ' '); 
         echo "<br>", number_format(((float)$usec+11111111 ), 15, ',', ' ');
Даст:
0,000144000000000
1,000144000000000
11,000144000000001
111,000144000000006
1 111,000144000000091
11 111,000144000000636
111 111,000144000005093
1 111 111,000143999932334
11 111 111,000143999233842

Как видно, чем больше целое число, тем больше погрешность в дробной части.
 

WMix

герр M:)ller
Партнер клуба
а как запаковать число с точностью до 14 знаков после запятой и даже не знаю сколько знаков перед запятой в 64bit ?
 
Сверху