android - 奇怪的while循环行为

标签 android c++ while-loop

当我取消注释“// cout <<当前<< endl”时,感觉如何?在下面的代码中,它有效吗?

#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 <<当前<< endl;”之后它打印:
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/

相关文章:

c++ - 流缓冲区实现的 std::endl 和 '\n' 之间的差异

在 while 循环内记录更改的 Pythonic 方式

python - Tkinter:在循环中更新标签

java - 从其他 fragment 控制蓝牙

android - Azure Pipeline - 自动化 Android 版本代码

c++ - 处理堆栈上的对象销毁

c++ - 使用Qt将所有数据库操作放在一个特定的线程中

javascript - 为什么这个 while 语句会创建无限循环?

安卓 : animating button on press through xml

android - 以编程方式向 LinearLayout 添加边框