C ++欧拉近似

时间:2016-10-11 00:37:08

标签: c++ approximation

当我输入0.1作为步长时,为什么我的代码仅将x值作为输出达到2.4?如果我输入的值为.01或.001,则最高为2.5。

#include <iostream>
#include <iomanip>
using namespace std; 
int main() {
    double step; 
    double x0 = 1.0; 
    double y0 = 1.0; 
    double diffY; 
    std::cout << std::fixed;
    std::cout << std::setprecision(2);
    cout << "Enter step value: ";
    cin >> step; 
    while (x0 <= 2.5 ) {

        diffY = x0 + ((3*y0) / x0);
        cout << x0 << "    " << y0 << "\n"; 
        x0+=step;
        y0+=step*(diffY);
    }

    return 0; //initially defined the main function to return an int
} 

谢谢!

1 个答案:

答案 0 :(得分:0)

良好的旧时尚浮点数错误,打印到您x0的高精度,你会得到这个:

1.1000000000000001
1.2000000000000002
...
2.4000000000000012
2.5000000000000013

请注意,在过去的过去,您将增加过去 2.5,因此不会执行上一次循环。这是因为浮点数是二进制(基数2)而非十进制(基数10),因此它们不能精确地表示每个数字。这包括0.1

比较浮点数时应始终使用epsilon:

float eps = step/100; // Only an example.
while (x0 <= 2.5 + eps ) {
    ...

有关详细信息,请read this。如果你想玩,here is a live example.