私のプログラムでは、多くの時間呼ばれている関数fmod()
のため、パフォーマンスが低下しています。 %
として書かれたCの整数mod
、++):"fmod()"を整数 "mod()"に置き換える方法
double a,b,d;
a = 10 * sqrt(2);
b = PI;
time_t result;
result = time(NULL);
printf("Time fmod: [%s]\n", asctime(localtime(&result)));
for (int i = 0;i < 1000000000; i++) {
d = fmod(a,b);
}
result = time(NULL);
printf("Time fmod: [%s]\n", asctime(localtime(&result)));
result = time(NULL);
printf("Time integer: [%s]\n", asctime(localtime(&result)));
for (int i = 0;i < 1000000000; i++) {
d = ((double)((int)(1000000*a) % (int)(1000000*b)))/1000000;
}
result = time(NULL);
printf("Time integer: [%s]\n", asctime(localtime(&result)));
(私はa
が負の場合、いくつかのより多くのニーズが行われるように、知っているが、少なくとも正の数のために、それは良いパフォーマンスの向上を与える18秒の代わりに、 110)、しかし明らかなキャッチがあります:私が与えた例では、私の数字にはもう小数点がないことを確かめるために、乗算の任意の数として1000000
を使用しました。
数字の最後の小数点以下のサイズを与える数学ライブラリには、ある種の関数がありますか? (パフォーマンスすぎ:-)を減少させていないうまくいけば機能)この程度
小数点以下の桁数は、浮動小数点数の繰り返しになります。小数点以下の桁数を知る方法はありません。 – Barmar
制限要因は、浮動小数点数の実際の数字だけではなく、 'std :: numeric_limits :: digits10'に基づいている可能性が高いです。 –
Drax