я подозреваю, что это может иметь что-то делать с ошибками округления, поскольку я использую двойники контролировать окончание цикла, но я хотел бы, чтобы действительно знать, что происходит нав то время как цикл не завершается должным образом
#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
не следует последнее утверждение вернуться ложным? I.e., не должен ли цикл прекратить @ 24.8?
Итак, хотя «25» печатается на экране, это на самом деле что-то вроде 24.99 внутри? Кроме того, как бы вы порекомендовали прекратить такой цикл, зная, что вы не можете отказаться от использования 0.2? И спасибо!! – bcf
@David Правильно, число, которое вы получаете, очень близко к '25' (24,9 ... и много девяток), поэтому' printf' печатает его как '25'. – dasblinkenlight