由于函数fmod()
被调用很多次,我的程序性能下降,现在我正在试验一种解决方法(使用整数mod
,在C++写成%
):如何用整数“mod()”函数替换“fmod()”函数
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 :: digit10',而不仅仅是您的浮点数内的实际数字。 –
Drax