

PHPで下記コードの実行速度を測定しようと思っています。

しかし、このコードを実行すると結果が本来であれば`0`秒となると思うのですが、  
`9.5367431640625E-7`秒という結果になることがあります。

**出力例**

[code]

    test0 秒 
    test9.5367431640625E-7 秒
    
[/code]

こちらの数値を検索すると、MiBやKiBという単位について出てくるのですが、  
この数値がたまに表示されることがある理由がわかりません。

ご存じの方いたら、教えていただきたいです。

**実行したコード**

[code]

    <?php
    $time_start = microtime(true);
    
    echo 'test';
    
    $time = microtime(true) - $time_start;
    echo "{$time} 秒";
    
[/code]


CC BY-SA 4.0
2019-11-10T08:26:31.963
60387
2019-11-10T12:39:18.533
2019-11-10T12:38:26.370
3060
36553
question
php
9.5367431640625E-7という数値は何を表しているのでしょうか


`9.5367431640625E-7`は一般に科学形式(科学技術形式と言ったりもする、scientific notation)と呼ばれるもので、

[code]

    9.5367431640625 × 10の(-7)乗
    
[/code]

を表しています。物理や化学の教科書にも使われているので、ご覧になったことはあると思いますが、「〜乗」を表す右肩乗せの小字(superscript)をコンピュータの文字体系の中で表すのは難しいため、

「× 10のn乗」を表す場合に、`En`と言う表記を末尾に付加します。

今回の例ですと、

[code]

    0.0000009.5367431640625
    
[/code]

を表していることになります。1マイクロ秒が`0.000001`ですから、約1マイクロ秒を表しています。

(科学形式自体は「秒」や「MiB/KiB」のような単位の情報は含んでいません。)

* * *

> こちらのコードを走らせると実行結果が、本来であれば、0秒となると思う

現在のあなたのコードはこのようになっています。

[code]

    $time_start = microtime(true);          //<-ここで時刻を取得
    
    echo 'test';                            //<- `echo 'test';`の実行にも時間がかかる
    
    $time = microtime(true) - $time_start;  //<- ここで時刻を取得
    
[/code]

と言うふうになっているので、 **結果が0にならない方が当たり前** です。  
(ちなみに間の`echo
'test';`がなくても、1回目の`microtime(true)`を呼ぶ瞬間と、2回目の`microtime(true)`呼ぶ瞬間との間には時間のズレがあります。)

PHPの`microtime`関数の持つ制約とPHPを実行するシステムの制約により、1マイクロ秒以下は誤差と考えてください。

* * *

ご質問の記述によると0秒と表示されることもあるのでしょうか。PHPの実行速度も速くなったなぁと言うのが正直なところです。ちなみに0秒と表示される場合でも、システムの時刻取得機能で取得できるほどの時間が経っていないと言うことを表しているだけで、実際の時間経過は0ではありません。


CC BY-SA 4.0
2019-11-10T09:20:12.827
60388
2019-11-10T12:39:18.533
2019-11-10T12:39:18.533
3060
13972
60387
answer