tex=293.9302250307
cpa=1.0445 + tex*(-3.4342e-4 + tex*(8.1524e-7 - tex*3.7677-10))
这是原计算式子
计算结果为: 1.0044233901160149
式子拆开分部计算时
n1=8.1524e-7 - tex*3.7677-10;
n2=tex*n1;
n3=-3.4342e-4 + n2;
n4=tex*n3;
cpa=1.0445+n4;
计算结果为: 1.0044389412119084
为什么最终的计算会有差距呢
由于这段计算需要进行多次循环,误差最后会累积到一个无法接受的程度,本人学习c不久,希望指点一下,感谢!
该回答引用ChatGPT
请参考下面的解决方案,如果有帮助,还请点击 “采纳” 感谢支持!
首先,两种方法都是进行数值计算,因此在计算过程中可能会出现一些精度误差。其次,拆开计算的方法可能导致变量类型的不同,从而导致结果的不同。最后,在计算过程中有不精确的四舍五入操作,这也可能导致误差的产生。
n1到n4都是什么类型?
所有浮点类型变量都用double类型
int main()
{
double tex = 293.9302250307;
double cpa1 = 1.0445 + tex*(-3.4342e-4 + tex*(8.1524e-7 - tex*3.7677e-10));
double n1,n2,n3,n4,cpa2;
n1=8.1524e-7 - tex*3.7677e-10;
n2=tex*n1;
n3=-3.4342e-4 + n2;
n4=tex*n3;
cpa2=1.0445+n4;
printf("cpa1=%.16lf,cpa2=%.16lf\n",cpa1,cpa2);
}
n1 n2 n3 n4是double吗
因为double型精度有限
如果你需要极高精度的浮点运算,类型必须改为decimal