当我取消注释“// 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循环中,每次将除权并将其添加到当前循环中时)将打印结果,依此类推,直到达到条件为止。

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

关于android - 奇怪的while循环行为,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/61938228/

10-12 03:03