相同的方程式和相同的参数为什么返回不同的计算结果?

时间:2019-07-26 08:59:44

标签: c++

我正在使用c ++进行一些数字计算。我对功能coefficients_of_EnergyFunc(knots)进行了一些改进。但是在改进前后,它返回相同的参数。然后,使用这些参数得到了b的不同计算结果。为什么会这样?

    double* A = coefficients_of_EnergyFunc(knots);

    qDebug() << "A[1] = " << A[1] << endl;
    qDebug() << "A[3] = " << A[3] << endl;
    qDebug() << "A[4] = " << A[4] << endl;
    qDebug() << "A[6] = " << A[6] << endl;
    qDebug() << "A[7] = " << A[7] << endl;
    qDebug() << "A[8] = " << A[8] << endl;

    double b = A[1] - A[3] * A[7] / A[8] - A[4] * A[6] / A[8];

    qDebug() << "b = " << A[1] - A[3] * A[7] / A[8] - A[4] * A[6] / A[8] << endl;

改进前的输出:

A[1] =  572589 

A[3] =  39582.9 

A[4] =  32693.6 

A[6] =  19791.5 

A[7] =  32693.6 

A[8] =  3390.15 

b =  -8.73115e-11

改进后的输出:

A[1] =  572589 

A[3] =  39582.9 

A[4] =  32693.6 

A[6] =  19791.5 

A[7] =  32693.6 

A[8] =  3390.15 

b =  -0.0677077 

顺便说一下,将这些参数代入公式以在python控制台中计算b,我得到:

>>> 572589 - 39582.9*32693.6 / 3390.15 - 32693.6*19791.5 / 3390.15
-0.0842116130515933

1 个答案:

答案 0 :(得分:0)

您的函数double* A = coefficients_of_EnergyFunc(knots);返回的值不同于显示屏上显示的值。由于我们不知道qDebug到底能做什么,所以我们无法真正判断。但是,猜测是舍入或仅显示小数一位。

因此,您的新功能(可能也是旧版本)coefficients_of_EnergyFunc(knots) has a bug

我们看不到这并在这里提供帮助。但这就是事实。

C ++计算当然正确。

#include <iostream>
#include <fstream>
#include <string>


int main()
{
    double A1 = 572589;
    double A3 = 39582.9;
    double A4 = 32693.6;
    double A6 = 19791.5;
    double A7 = 32693.6;
    double A8 = 3390.15;

    double b = A1 - A3 * A7 / A8 - A4 * A6 / A8;
    std::cout << b << '\n';
    return 0;
}

如果您显示了所有相关功能,那将真的很有帮助。