摘要 回复网友来信,本节与下一节再谈多项式的错误计算。
有网友问:计算机的错误计算(一百零五)中介绍了一个多项式;对此多项式,Visual Studio与 Excel 均给出错误结果,并且错的相同。那么,请问:
(1)该多项式是一个特例,还是具有普遍性?
(2)另外,其它环境或软件的效果如何?即只有微软的Visual Studio与Excel有问题吗?还是这些多项式在别的软件或环境下也是错误结果?
(3)最后,它们错的相同吗?还是都大不一样?即错误结果有规律吗?
答:就第1个问题的答复是:是的,具有普遍性。不妨访问 不可信计算,即可产生无数个多项式(比如,输入 123,然后点 产生 按钮,则可产生一个关于123的多项式)。然后在各种环境下试试。其它的,不多说,请看案例。
例1. 计算
不妨首先用Java编程计算:
import java.lang.Math;
public class Poly{
public static void main(String[] args) {
double x=45678;
double c7=111990,c6=5115500000.0,c5=949100000,c4=4058000000.0,c3=1531000000,c2=5781000000.0,c1=350800000,c0=-321499872.52;
double y1 = c7*Math.pow(x,7)+c6*Math.pow(x,6)+c5*Math.pow(x,5)+c4*Math.pow(x,4);
double y2 = c3*Math.pow(x,3)+c2*Math.pow(x,2)+c1*Math.pow(x,1)+c0;
System.out.println(y1+y2);
}
}
则运行后输出 9.293099042477446E37 .
然后,使用Go语言编程:
package main
import (
"fmt"
"math"
)
func main() {
x := 45678.0;
c7 := 111990.0; c6 := 5115500000.0; c5 := 949100000.0; c4 := 4058000000.0; c3 := 1531000000.0; c2 := 5781000000.0;
c1 := 350800000.0; c0 := -321499872.52;
result := c7*math.Pow(x,7)+c6*math.Pow(x,6)+c5*math.Pow(x,5)+c4*math.Pow(x,4)+c3*math.Pow(x,3)+c2*math.Pow(x,2)+c1*math.Pow(x,1)+c0;
fmt.Printf("%v", result)
}
则运行后的输出完全相同:9.293099042477446e+37 .
然而,正确值为 -0.64307299252e9(ISRealsoft 提供)。这样,二者具有相同的错误输出。