Haskell:错误的数学结果

Tom*_*iec 4 math haskell

我正在尝试使用Haskell评估一些功能。其中之一是:

k x = 27 * x ^ 4 + 1792 * x ^ 3 + 2592 * x ^ 2 - 324 * x - 243
Run Code Online (Sandbox Code Playgroud)

使用Wolfram Alpha,我发现它的根源:

27x^4 + 1792x^3 + 2592x^2 - 324x - 243 = 0
=> x ? 0.331478863194230
Run Code Online (Sandbox Code Playgroud)

但是用根进行评估时,haskell给出了错误的答案:

27x^4 + 1792x^3 + 2592x^2 - 324x - 243 = 0
=> x ? 0.331478863194230
Run Code Online (Sandbox Code Playgroud)

我敢肯定这不是Wolfram的问题,因为Desmos给出了相同的结果。我对Haskell不太熟悉,我想知道造成这种奇怪行为的原因是什么。

Ami*_*pta 6

根据有理根定理,很容易看到此多项式没有有理根。因此Wolfram永远无法以十进制形式向您显示确切的答案。当然,它必须四舍五入到近似值,甚至用?符号表示它正在这样做。将近似根插入函数不会输出0也就不足为奇了。

实际上,如果避免使用浮点数,则可以以任意精度查看传递该输入时的输出结果:

 > k x = 27 * x ^ 4 + 1792 * x ^ 3 + 2592 * x ^ 2 - 324 * x - 243
 > k 0.331478863194230 :: Rational
=> (-54003681976002235123002052941041334918065893) % 100000000000000000000000000000000000000000000000000000000
Run Code Online (Sandbox Code Playgroud)

这是

-5.4003681976002235123002052941041334918065893e-13
Run Code Online (Sandbox Code Playgroud)