getmicrotime() возвращает странные результаты[PHP]
list($usec, $sec) = explode(" ",microtime());
return ($usec + $sec);
}
$s = getmicrotime();
echo round((getmicrotime()-$s),10)."<br />\n";
$s = getmicrotime();
echo round((getmicrotime()-$s),10)."<br />\n";
$s = getmicrotime();
echo round((getmicrotime()-$s),10)."<br />\n";
функция которая трижды вызывается и печатает результат
9.0599E-6
6.1989E-6
как видно из примера, первое число значительно больше остальных. резонный вопрос, почему?
5.0875663757324E-6
5.0863027572632E-6
5.0837993621826E-6
Обозначим:
($usec1 + $sec1) = getmicrotime() который в round
($usec2 + $sec2) = $s = getmicrotime();
Соответственно если $usec1 == $usec2, т.е. замеры сделаны в одну секунду, то их разница равна нулю, тогда выводится на экран только $sec1 - $sec2, что и дает E-6. Если же $usec1 > $usec2, т.е. замер $sec1 произошел на след. секунде, то тогда перед значением ($sec1 - $sec2) появиться одна ведущая цифра, так как $usec1 и $usec2 различны на разряд. От этого, соответсвенно, и появляется ваша E-5, так как теперь число имеет только 5 нулей после точки, а не 6, когда замеры идут в одну секунду.
ЗЫ: а ещё, заместо этой getmicrotime() используйте microtime(true) - результат тот же (если php>=5)
Обозначим:
($usec1 + $sec1) = getmicrotime() который в round
($usec2 + $sec2) = $s = getmicrotime();
Соответственно если $usec1 == $usec2, т.е. замеры сделаны в одну секунду, то их разница равна нулю, тогда выводится на экран только $sec1 - $sec2, что и дает E-6. Если же $usec1 > $usec2, т.е. замер $sec1 произошел на след. секунде, то тогда перед значением ($sec1 - $sec2) появиться одна ведущая цифра, так как $usec1 и $usec2 различны на разряд. От этого, соответсвенно, и появляется ваша E-5, так как теперь число имеет только 5 нулей после точки, а не 6, когда замеры идут в одну секунду.
хуйню сказал(без обид)
я тебя конечно уважаю, много умных мыслей высказал,
но в данном вопросе ты по моему слегка запутался
определения недостаточно корректные и выводы нелогичные
исходя из твоих выводов все последующие вызовы дают меньший результат относительно предыдущего в геометрической прогрессии
в деталях
невозможно по определению
про это вообще говорить нечего, $usec2 всегда больше $usec1
ЗЫ: а ещё, заместо этой getmicrotime() используйте microtime(true) - результат тот же (если php>=5)
это все конечно замечательно, я давно знаю об этом функционале, но есть одна давно известная проблема, что не все перешли даже на 4 php так что о 5 и говорить нечего. это факт и оспаривать его нет смысла. а при написании приложений стоит все таки задумываться о поддержке ограниченными системными ресурсами
у меня есть определенная теория на данный счет
на тему затрат системных ресурсов
я предполагаю что причина именно в первичном обращении к функции
чисто в теории на ее месте может быть любая другая функция
при первичном обращении к функции интерпретатор единожды выполняет код и при повторном обращении к этому же коду он загружает данные из памяти, а не вновь интерпретирует данные, и выполняет их
поскольку данные были загружены из памяти на их выполнение требуется меньше ресурсов, что объясняет последующее выполнение этой же программы за меньшее время
PS мне не довелось полноценно протестировать свою теорию, но я полагаю что она вера
А посчет перехода, ну дык уже PHP6 выпускать собираются, а народ ещё на 4 сидит. 5 версию хостеры вполне адекватно поддерживают. Так что уж на нём пора писать (хотя эт не суть разговора, ничто не мешает функцию написать, которая будет в зависимости от версии нужное делать).
Хотя, конечно, разговор тут не об этом
[quote="PHP.net"]
[07-Aug-2008] The PHP development team would like to announce the immediate availability of PHP 4.4.9. It continues to improve the security and the stability of the 4.4 branch and all users are strongly encouraged to upgrade to it as soon as possible. This release wraps up all the outstanding patches for the PHP 4.4 series, and is therefore the [SIZE=3] last PHP 4.4[/SIZE] release.
[/quote]
ты о чем?? как "не перешли на 4й"... это, глупость, имхо. ибо сколько можно думать о тех, у кого еще 95я винда и IE 4й версии.... да + ко всему еще и монитор 14" CRT с защитным экранов в виде навесного стёклышка и Pentium I - 133 Mhz :)))))
ps: и еще... не дерзи :) здесь форум, а не двор, где можно постоять, поплевать и поматюкаться ;)
собственно пару месяцев назад, кто-то из отцов говорил что натыкался на хостер где php 3 стоял
да и среди моих знакомых хостеров у некоторых 4 php стоит по умалчании
здорово. я надрываюсь, ломаю голову чтобы подобрать наиболее корректные слова, а он мне не дерзи :(
да и среди моих знакомых хостеров у некоторых 4 php стоит по умалчании
Не знаю, что за хостер, везде, где я размещал клиентов - поодерживается неплохо пхп5. А на 4 вообще не вижу смысла писать. Может - просто пережиток прошлого, что он стоит, или просто что масса людей, начинающих изучать пхп, пишут только на 4, не используя пхп5, ну и ещё, что большинство движков написаны. Вот потому, вероятно, он ещё используется
это типа мне одному кажется??? прочитай первые 2 ТВОИХ слова. если это более корректные слова, то я президент РФ :)
http://forum.codenet.ru/showpost.php?p=261230&postcount=4
по сему и не дерзи ) тебе ж никто не давал права оскорблять форумчан =) если я не прав, то расскажи мне почему =)
эт типа значит пхп5 фигня?? Ну дык, понимаете, вы сравниваете абсолютные разнцые вещи. В таком же духе можно сказать, что нафиг нам xHTML, когда все работает и на простом HTML)))
я извиняюсь
это не был наезд на php5
я дома установил новый qip и меня слегка разозлило то что разработчики в него внедрили. извиняюсь погорячился
я против php, 5-ой версии, ничего не имею, скорей даже напротив,
очень хотел бы окончательно перейти на 5-ую версию,
но мне не хочется совсем отказываться от поддержки моих приложений старыми версиями
поясню:
когда читаю описание какого-нибудь крупного интернет приложения и в нем говорится о том что оно поддерживает например PHP начиная с версии 4.3 и MySQL начиная с 4.0 и когда в это же время пытаешься написать что-то соразмеримое ему (не на таком уровне, но все же) кажется логичным реализовывать в своем приложении такую поддержку
так же заказчики иногда требуют что бы приложение поддерживалось разными версиями php в том числе 4-ой
мне все таки не ясно почему первый вызов функции выдает результат настолько отличающийся от всех последующих
я написал, на мой взгляд, более простой пример, с наработками предложенными UAS, который должен более четко демонстрировать то, что разногласие происходит именно при первом вызове
$s = microtime(true);
$e = microtime(true)-$s;
echo "iter: $i - $e\n";
}
iter: 2 - 2.1457672119141E-6
iter: 3 - 1.9073486328125E-6
iter: 4 - 1.9073486328125E-6
iter: 5 - 1.9073486328125E-6
пример показывает то что разница есть и в других случаях, но именно первый вызов функции возвращает значение с недопустимой разницей
Вот что у меня получилось на FreeBSD 6.1
iter: 2 - 5.96046447754E-06
iter: 3 - 2.14576721191E-06
iter: 4 - 3.09944152832E-06
iter: 5 - 1.90734863281E-06