我正在尝试使用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不太熟悉,我想知道造成这种奇怪行为的原因是什么。
根据有理根定理,很容易看到此多项式没有有理根。因此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)