首页 > 解决方案 > 0.00001 增量

问题描述

我是 C 的初学者,我正在尝试在 While 循环中进行 0.00001 增量。例如, double t = 0.00001 并且我希望循环每次以 0.00001 的增量运行,第二次将是 0.00002 等等。有人可以帮忙吗?

这是我正在调试的代码的一部分。我正在尝试运行模拟,直到 v 变为负值。每次 While 循环为真并重复时,我希望它添加 0.00001 的增量

    t = 0.00001; 
    f = fMid;  
    v = v0; 
    x = 0;  

    // 10.2 Calculate the simulated stopping distance
    while( v >= 0)
    { 
     a = - f - (C_d)*(v*v); 

     // Calculate the new position 
     x_new = x + (v*t);  

     // Calculate the new velocity
     v_new = v + (a*t);

     x = x_new;
     v = v_new;

     ++t;
    }

标签: c

解决方案


由于浮点算术不精确(请参阅浮点数学是否损坏?)一种“幼稚”的方法,例如:

double t = 0.0;
while (t < N) {   // Or your specific condition here
    t += 0.00001;
}

可能无法正常工作,可能存在问题:

  1. 在每次迭代中,由不精确计算引起的误差会累积,并且循环越长,误差就会越大。
  2. 在某些时候,数字tt+0.00001可能变得相等,因为double表示可能无法区分它们。

为了防止(2)和最小化(1)的影响,可以使用整数计数器,t并在每个循环中根据它重新计算 的值:

unsigned int ii = 0;
double t;
while (ii < N) {   // Or your specific condition here
    t = ii * 0.00001;
    ii ++;
}

推荐阅读