提问人:bubucodex 提问时间:4/6/2023 最后编辑:bubucodex 更新时间:4/6/2023 访问量:112
具有相同值的两个变量的差值产生非零结果
Difference of two variables having same values yields non-zero result
问:
以下是我编写的用于计算数学表达式的代码:
int main()
{
double x,y,A1,B1,C1,result;
x = 8.1500e-07;
y = 7.9714e-08;
A1 = (1-exp(-2*x))/(2*x);
B1 = 2/(x*( 1 + pow((y/x),2)) );
C1 = 1 - ( exp(-x)*( cos(y) - (y/x)*sin(y) ));
result = 1 + A1 - B1*C1;
printf("1 + A1 = %e\n",1+A1);
printf("B1*C1 = %e\n",B1*C1);
printf("result = %e\n",result);
}
当单独计算时,1+A1 似乎被评估为 等于 B1 C1,但 1+A1-B1 C1结果证明是一个非常小的负值。结果如下: .我想知道我是否可以将其视为计算中的一些错误,类似于实验中的错误,并安全地认为结果为零?或者,我错过了什么?
答:
3赞
KamilCuk
4/6/2023
#1
这些值与第 6 位小数相同并不意味着它们相同。
printf("1 +A1 = %.20e\n",1+A1);
printf("B1*C1 = %.20e\n",B1*C1);
指纹:
1 +A1 = 1.99999918502629325801e+00
B1*C1 = 1.99999918503684992466e+00
评论
%e
1 + A1 - B1*C1
fma(-B1, C1, 1 + A1)