我怎样才能加快这个循环?

Joo*_*zty 6 c performance loops

如何加速此循环(在C中)?

unsigned int x = 50000000;
double a= 0.9;
double b= -0.9;
for ( unsigned int i = 1; i <= x; i++)
{
    a *= 0.9; //power
    b -=  a/i;
}
Run Code Online (Sandbox Code Playgroud)

执行时间:14.000秒

我不知道为什么,但是当我在代码中添加这两行时,执行时间只有1.000秒.

unsigned int x = 50000000;
double a= 0.9;
double b= -0.9;
for ( unsigned int i = 1; i <= x; i++)
{
    a *= 0.9; //power
    a += 10e250;
    a -=10e250;
    b -=  a/i;
}
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助

gna*_*729 6

首先,代码运行速度低于预期的最可能原因是a变为非规范化数字.非规范化数字是一个特殊情况,可能会运行很多,速度慢很多.也可以通过添加10 ^ 251并再次减去它来将a更改为0并将零除以任何更快(因为不需要计算结果).

但真正的加速来自不是愚蠢地添加微小的,没有任何影响的微小数字.当x =几百时,a将是如此之小以至于从b中减去a/i将不会产生任何差异.所以代替b - = a/i; 你写

double old_b = b;
b -= a / i;
if (b == old_b) break;
Run Code Online (Sandbox Code Playgroud)

你的时间会从几秒钟变化到不到一毫秒.