c++ - while 循环没有正确终止

标签 c++ loops while-loop termination

我怀疑这可能与舍入误差有关,因为我使用 double 来控制循环终止,但我真的想知道发生了什么

#include<iostream>

using namespace std;

int main()
{
  double h = 0.2;  // stepsize                                                                                                                                                                       
  double t_0 = 1;
  double t_n = 25;
  double y_0 = 1;  // initial condition                                                                                                                                                              


  double t = t_0;
  while(t < t_n)
    {
      cout << "t: " << t << endl;
      cout << "(t < t_n): " << (t < t_n) << endl;
      t += h;
    }
}

最后几行输出是

t: 24.4
(t < t_n): 1
t: 24.6
(t < t_n): 1
t: 24.8
(t < t_n): 1
t: 25
(t < t_n): 1

最后一条语句不应该返回 false 吗?即,循环不应该在 24.8 时终止吗?

最佳答案

这不起作用的原因是 0.2 不能在 float 中精确表示,因为它的小数部分不是两个负幂的精确和。如果您尝试使用不同的数字,例如 0.25,该代码将起作用,因为 0.252^-2

关于c++ - while 循环没有正确终止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16267849/

相关文章:

android - 为 Android 发送 RIL 请求

c++ - 每个类(class)都有不同的 boost 日志接收器

python - while循环测试

java - 如何要求用户输入字符串直到用户完成?

c++ - 如果我将 extern "C++"与 C 工具链一起使用会怎样?

c++ - 移动 std::deque 后引用/指针是否保证有效?

python - 从txt文件Python创建字典

java - 如何在 Java 中运行进程直到按下按钮?

python - matplotlib 中的子图创建循环

java - 有没有办法限制 do-while 循环中的一行代码只完成一次?