精度の低い浮動小数点数で算術演算を実行すると、異常な計算時間が検出されました。次の単純なコードは、この動作を示します。
#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.5の場合
x = 0.000000
時間:1.32000セグメントy=0.9の場合
x = 0.000000
時間:19.99000セグメント
コードをテストするために、次の仕様のラップトップを使用しています。
- CPU:Intel®Core™2Duo CPU T5800@2.00GHz×2
- RAM:4 GB
- OS:Ubuntu 12.04(64ビット)
- モデル:Dell Studio 1535
誰かがこの動作が発生する理由を詳細に説明できますか?y = 0.9の場合、x値はy = 0.5の場合よりもゆっくりと0になることを知っているので、問題はこれに直接関係していると思われます。