奇怪的 while 循环行为

2023-12-02

当我取消注释“//cout

#include <iostream>
#include <float.h>

using namespace std;

int main()
{
  char divider = 2;
  float power = 1;
  float number = 1;
  float current = number + power;
  cout.precision(1024);
  // Divide until rounded off
  while(current != number)
  {
    power /= divider;
    current = number + power;
    //cout << current << endl;
  }

  cout << power * divider << endl;
  cout << FLT_EPSILON << endl;
}

上面的代码打印:

1.40129846432481707092372958328991613128026194187651577175706828388979108268586060148663818836212158203125e-45
1.1920928955078125e-07

但在取消注释行“//cout

1.5
1.25
1.125
1.0625
1.03125
1.015625
1.0078125
1.00390625
1.001953125
1.0009765625
1.00048828125
1.000244140625
1.0001220703125
1.00006103515625
1.000030517578125
1.0000152587890625
1.00000762939453125
1.000003814697265625
1.0000019073486328125
1.00000095367431640625
1.000000476837158203125
1.0000002384185791015625
1.00000011920928955078125
1
1.1920928955078125e-07
1.1920928955078125e-07

这是正确的,但为什么没有那条线它就不起作用?

我使用ID为“com.duy.c.cpp.compiler”版本“1.2.4-armeabi-v7a”的Android应用程序。


这只是我的猜测,但从你评论时我看到的cout << current << endl您的程序执行微积分,但屏幕上唯一打印的内容是程序末尾的 2 计数,因此值power * diviser以及 flt-epsilon 的值。

另一方面,如果您取消注释它,您的程序会打印在 while 循环中完成的微积分的每个结果,这就是为什么它会改变您所看到的很多内容(因为在 while 循环中,每次您将除幂并将其添加到当前它将打印结果等,直到达到条件)。

我希望我的解释足够清楚^^

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

奇怪的 while 循环行为 的相关文章

随机推荐