小さな精度の浮動小数点で算術演算を実行すると、異常な計算時間が検出されました。単純なコード展示以下この動作:Yで算術演算に通常よりも時間がかかる理由を教えてください。
= 0.5
X = 0.000000
時間:1.32000segsここ#include <time.h> #include <stdlib.h> #include <stdio.h> const int MAX_ITER = 100000000; int main(int argc, char *argv[]){ double x = 1.0, y; int i; clock_t t1, t2; scanf("%lf", &y); t1 = clock(); for (i = 0; i < MAX_ITER; i++) x *= y; t2 = clock(); printf("x = %lf\n", x); printf("Time: %.5lfsegs\n", ((double) (t2 - t1))/CLOCKS_PER_SEC); return 0; }
は、プログラムの2回の異なる実行であります
Y = 0.9
X = 0.000000
時間と共に:19.99000segs
Iコードをテストするために、以下の仕様を有するラップトップを使用しています:
- CPU:インテル®Core™2 DuoプロセッサCPUのT5800する@ 2.00GHz×2
- RAM:4ギガバイト
- OS:Ubuntuの12.04(64ビット)
- モデル:Dellのスタジオ1535
この現象が発生した理由を誰かが詳細に説明してもらえますか?私は、y = 0.9の場合、xの値がy = 0.5の場合よりもゆっくりと0になることを認識しているので、この問題は直接この問題に関係していると考えられます。
0になる前に、2番目のケースで不規則なものが増えている可能性があります。 –
denormalsのパフォーマンスへの影響についての[この回答](http://stackoverflow.com/a/9314926/1011995)も参照してください。 –