如何正确迭代双精度

mar*_*trz 1 c++ floating-point double loops

我遍历t这样

double dt = 0.1, t;
double tmax = 100;
for (t = 0; t <= tmax; t += dt) { /*do something*/ }
Run Code Online (Sandbox Code Playgroud)

如果dt是0.1,就像这里一样,一切正常,并执行步骤t = 100.但是,如果我减少步骤,例如dt = 0.001,最后一步不会执行.

我应该如何正确地迭代双打?

Mar*_*mus 5

迭代一个整数并使用开始步公式来获取每个double值.

double dt = 0.1, t;
double tmax = 100;
int i, n = (int)(tmax / dt); // n: check your rounding or specify explicitly.
for (i = 0; i <= n; i++) { t = 0/*start*/ + dt * i; /*do something*/ }
Run Code Online (Sandbox Code Playgroud)