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 で終了すべきではありませんか?