c - 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;
}
解决方案
由于浮点算术不精确(请参阅浮点数学是否损坏?)一种“幼稚”的方法,例如:
double t = 0.0;
while (t < N) { // Or your specific condition here
t += 0.00001;
}
可能无法正常工作,可能存在问题:
- 在每次迭代中,由不精确计算引起的误差会累积,并且循环越长,误差就会越大。
- 在某些时候,数字
t
和t+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 ++;
}
推荐阅读
- javascript - 以毫秒为单位的时间戳转换为本地时间
- java - Junit测试 - 如何模拟私有接口类型的类私有成员?
- linux - Shibboleth 2.4.5 不发布需要的属性
- python - 堆叠/加入/合并两个不同行数和列数的不同DataFrame
- r - R 闪亮 | 设置一个可编辑的数据框,以便稍后制作绘图
- azure - Azure 上的 Flask APP 给出 import cv2 ImportError: libGL.so.1: after deployment
- javascript - 如何在不显示SVG介绍的情况下将SVG转换成Canvas?
- angular - “在'@angular/fire/firestore'中找不到导出'启用持久令牌'
- sql-server - Sql Server如何将字段的值存储在另一条记录中
- json - 无法将 []interface{} 转换为 []byte:“interface {} 是 []interface [],而不是 []uint8”