有人可以用这个小程序解释这里发生了什么吗?
#include<stdio.h>
int main()
{
float a=0.577;
float b=0.921;
float c;
int i;
for (i=0;i<100000000;i+=1){
c=0.7*a-0.2*b;
//a=0.145*c+2.7*b;
}
printf ("%.3f\n",c);
}
Run Code Online (Sandbox Code Playgroud)
注意,有一行注释掉了.
我首先编译它没有线,然后是线.(使用gcc -O2 ...
).并测量了处理时间.我很惊讶地发现执行时间0.001s
与之相反2.444s
.这没有多大意义.或者更确切地说,这背后必定有一些逻辑.
您能否解释一下发生了什么以及如何缓解这个问题?
我处理一个处理大量数据的程序,在我看来,我遇到了相同的性能问题.
我正在考虑从浮点数转换为整数但似乎整数表示它的行为相同.
编辑:最后解决方案是微不足道和合乎逻辑的.所以我感谢所有答案和解释!
jma*_*man 13
在第一种情况下,计算值是恒定的.编译器将c = 0.7 * 0.577 - 0.2 * 0.921
在编译时计算.它甚至免费为虚无之内它改变(优化圈外a
,b
和c
是不变的).
在第二个实例,a
并c
改变用于每次迭代所以必须计算100000000
倍.
归档时间: |
|
查看次数: |
186 次 |
最近记录: |