0

私はブロッキング アルゴリズムを作成していますが、そのようなアルゴリズムにタイムアウトを追加することは、精度を維持する必要がある場合、それほど簡単ではないことに気付きました。
タイムアウトを追加するということは、ブロッキング アルゴリズムが X ミリ秒後に中止されなければならないことを意味します。今、私には2つのオプションがあるようです:

  1. 反復時間 (エラーはあるが速い)
    • ブロッキング状態を確認する
    • 1 ずつ反復します (これは、 usleeptime_elapsedを使用して 1e-6 秒を意味します)
    • と比較time_elapsedしてくださいtimeout。(これが私が話す問題です
    • usleep(1)
  2. 反復ごとにシステム時刻を取得する (遅いが正確)
    • はこれを行う方法を知っています。それについての回答を投稿しないでください。

timeoutとの競合time_elapsed

そして気になるのがこちら。10e-6 秒間スリープしているtimeout間、ミリ秒 (10e-3) 単位になります。usleepしたがって、 mytime_elapsedは よりも 1000 倍正確になりtimeoutます。(と等しい演算を除算せずに下3桁を切り捨てたい。除算アルゴリズムが遅すぎる。 time_elapsedfloor($time_elapsed/1000)

概要

変数を 1000 で割らずに 1000 倍小さくしたいのですが、データを削除したいだけです。バイナリではビットシフト演算子を使用しますが、10 進システムに適用する方法がわかりません。

コードサンプル:

SO を使用している人が理論的な質問に答えられない場合、彼らは本当にコードに飢えていることがあります。ここにあります:

floor($time_elapsed/1000);

このコードをもっと速いものに置き換えたいです。質問自体はタイムアウトでいっぱいですが、質問のタイトルはそのデータの切り捨てに関するものであることに注意してください。他のユーザーは、タイミング以外の目的でソリューションが役立つ場合があります。

4

2 に答える 2

0

これを試して:

(int)($time_elapsed*0.001)

これはずっと速いはずです

于 2013-04-17T19:21:46.767 に答える
0

たぶん、これはPhp number formatに役立ちます。これにより丸めが発生しますが、それが受け入れられない場合は、PHP の型付けが緩く、特定のレベルの精度で数値を定義できないため、可能ではないと思います。

于 2013-04-17T18:50:45.580 に答える