0

さまざまなデータ型が microtime() 関数の出力の表示方法をどのように制御しているかを理解しようとしていますか?

ここに 3 つのシナリオがあります。

1 . ブール値を true に設定しているため、マイクロタイム関数の出力が浮動小数点形式で表示されます。

知りたいのですが、float 関数はデフォルトで小数点以下何桁まで表示されますか (この場合は 4 です)?

それはCPUのアーキテクチャとどのように関係していますか?

lab$ php -r 'echo microtime(true),"\n";'
1361544317.2586

2 . ここで、microtime() 関数の出力は double 形式に型キャストされています。

では、マイクロ秒の小数点以下 6 桁までしか表示されないということですか? float およびその最大サイズ/精度とはどう違うのですか?

lab$ php -r 'echo (double)microtime(),"\n";'
0.751238

3 . これは microtime() 関数のデフォルトの使用法で、マイクロ秒と UNIX エポック タイムスタンプの両方を出力します。

lab$ php -r 'echo microtime(),"\n";' output: 0.27127200 1361544378

多くの場所で、microtime() が次のように mt_rand() PRNG のシードを生成するために使用されているのを見たので、これを理解したいと思いました。

mt_srand((double)microtime() * 1000000)

ここでの型キャストと 10^6 の乗算の使用は何ですか? また、mt_srand() のパラメータで可能な最大値はいくつですか?

ありがとう。

4

1 に答える 1

1

浮動小数点数には 1 つの問題があります。数値が大きいか、浮動小数点の精度が高くなる可能性があります。この問題は、大きな秒数 (1970/1/1 以降の秒数) と高精度 (マイクロ秒) の問題には適合しません。


PHP は、タイムスタンプの浮動小数点部分とエポックからの完全な秒数を文字列内の 2 つの個別の値として返すことで、この問題を解決しようとします。

精度がそれほど重要ではない状況では、PHP は、最も近いマイクロ秒に丸められた float 値としてタイムスタンプを返すこともサポートしています。私のシステムでは、例のように精度は 10.000 秒です。これが許可されているかどうかはわかりません。

PHPマニュアルからの引用:

デフォルトでは、microtime() は "msec sec" の形式の文字列を返します。ここで、sec は Unix エポック (1970 年 1 月 1 日 0:00:00 GMT) からの秒数で測定された現在の時刻であり、msec はsec から経過したマイクロ秒数 (秒単位)。

get_as_float が TRUE に設定されている場合、microtime() は float を返します。これは、最も近いマイクロ秒まで正確なUnix エポックからの現在の時間を秒単位で表します。

つまり、最も正確な精度が必要な場合はmicrotime()、param なしで使用get_as_floatし、文字列や bc_math 操作を使用して最終的なタイムスタンプを作成する必要があります。

于 2013-02-22T15:44:34.410 に答える