如何解决C中的Pow精度是否取决于参数的大小?
我要维护的旧版代码具有一个带有double类型变量x的函数。此变量包含以米为单位的位置。预期该值将保持在mm范围内,例如0.0001 然后我注意到了这样的代码中的注释: 目标平台是用于x86_64的Linux 3.10.x,我们使用GCC编译器版本4.9.3。 我尝试了一个小的测试程序,当使用大于或小于1的参数时,确实确实显示了较大(但仍然不是很明显)的错误,但这也可能是由输入和/或结果的方式引起的用浮点数表示? 提供输出:// We will take the 6th power of this variable.
// Convert number to mm to get better accuracy.
x /= 1.0e-3;
double y = pow(x,6.0);
#include <stdio.h>
#include <math.h>
void printpow(double d)
{
double pow6 = pow(d,6.0);
printf("% 8g ^ 6 = %.20g\n",d,pow6);
}
int main(int argc,char **argv)
{
printpow(7.0e-10);
printpow(7.0e-6);
printpow(7.0e-3);
printpow(7.0);
printpow(7.0e3);
printpow(7.0e6);
printpow(7.0e10);
return 0;
}
7e-10 ^ 6 = 1.1764899999999995812e-55
7e-06 ^ 6 = 1.1764899999999999629e-31
0.007 ^ 6 = 1.1764900000000001195e-13
7 ^ 6 = 117649
7000 ^ 6 = 1.1764900000000000603e+23
7e+06 ^ 6 = 1.1764899999999999889e+41
7e+10 ^ 6 = 1.1764900000000000914e+65
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。