0

GSL多項式ソルバーで間違った結果が返されます。GSL 3 次多項式ソルバーを使用して、次の多項式を解こうとしました。

x^3-1.96848e20 x^2+9.07605e28 x+9.07605e28 = 0

Wolframalphaでの結果は次のとおりです

  • -1
  • 4.61069e+8
  • 1.96848e+20

私のプログラムでは、結果は次のとおりです。

  • 2.30531e+08
  • 2.30531e+08
  • 1.96848e+20

私が使用したコード

   #include <iostream>
    #include <gsl/gsl_poly.h>

    using namespace std;

    int main() {
      double result[3]={0,0,0};
      gsl_poly_solve_cubic(-1.96848e20,9.07605e28,9.07605e28, &result[0], &result[1], &result[2]);
      cout << result[0] << endl;
      cout << result[1] << endl;
      cout << result[2] << endl;
      return 0;
    }

何が間違っている可能性がありますか?

編集:実際、Wolframalphaも奇妙な答えを出しています

更新: Wolframalpha の両方が間違っており (正しい答えに少し近い)、私のコードが間違っています。

これはPython(Numpyライブラリ)での同じソリューションです

In [11]: np.roots(p)
Out[11]: array([  1.96848000e+20,   4.61068948e+08,  -9.99999998e-01])
4

1 に答える 1