在计算机中,浮点数的数学运算实际上是分别使用基数和指数数进行处理,然后将它们组合在一起.我们在计算基础课本中学到了这一点.然而,我发现C程序和MatLab的限制有很大的不同.下面是一个例子:
C程序:
#include <stdio.h>
int main()
{
float c1, c2, c3;
c1 = 1.0e-20;
c2 = 1.0e-30;
c3 = c1 * c2;
printf("%e,%e,%e\n",c1,c2,c3);
return 0;
}
运行结果为:
1.000000e-20,1.000000e-30,0.000000e+00
MatLab程序:
c1 = 1.0e-20;
c2 = 1.0e-30;
c3 = c1 * c2;
fprintf("%e,%e,%e\n",c1,c2,c3);
运行结果为:
1.000000e-20,1.000000e-30,1.000000e-50
显然,MatLab给出了正确的乘法结果,而C给出了错误的结果.有人能回答为什么会发生这种情况吗?
在我的项目中,我的计算涉及到用C语言进行的如此少量的计算.既然MatLab可以正确地做到这一点,你能给我一个建议吗?我怎么也可以用C语言做到这一点呢?