<< 国家プロジェクト | main | 子守遠足inあすたむらんど徳島 >>

ヘッドライン - 流行りモノ♪

RoboForm.jpgロボフォーム(RoboForm)
いつも困るのが、たくさんのIDとパスワード・・・。
RoboFormは、一度ログインした情報を全て記録保存し、次 からは1クリックで好きなサイトにログインできます。
もちろん情報は暗号化されていて安心です
こんなに便利なツールが無料で自由に使えます。

浮動小数点演算の速度差

fputest.jpg

とある演算ロジックの処理時間を計測するために、ちょんプロを作ってたんですが、ふと面白い現象に遭遇しました。

まず、次のC言語テストコードを実行しました。
10万回、浮動小数点の値を二乗するだけです。
平均140msの処理時間でした。
float fTmp1, fTmp2 = 1.0e-40 ;
for( int i = 0; i < 100000 ; i++ )
{
    fTmp1 = fTmp2 * fTmp2 ;
}

<演算部のアセンブルリスト>
fld dword ptr [ebp-0x60]
fmul dword ptr [ebp-0x60]
fstp dword ptr [ebp-0x5c]


次にfTmp2の値を大きくして同じテスト。
平均60ms。
float fTmp1, fTmp2 = 1.0e-20 ;


更にfTmp2の値を大きくして同じテスト。
平均1ms以内。
float fTmp1, fTmp2 = 1.0e-10 ;


ごく小さな値になればなるほど処理時間が必要。
FPUの指数部と仮数部正規化処理によって変化が出るのは理解できるのですが、これだけの差が出るとなんとなく意外な感じでした。

ちなみに、整数型で同じテストを行ってみましたが、予想どおり1ms以内で完了でした。
<条件>
Pentium M 1.1GHz / (512+256)MB RAM / WinXP
コンパイラ:Borland C++ Builder 5
開発・仕事 > 覚え書き | comments (0) | trackbacks (0)

Comments

Post your Comment

Trackbacks