c – 15-17 binary64的有效小数?
作者:互联网
我从wikipedia中了解到,双数最多有15-17个有效小数
但是,对于下面的简单C程序
double x = std::pow(10,-16);
std::cout<<"x="<<std::setprecision(100000)<<x<<std::endl;
(为了测试它,使用this online shell),我明白了
x=9.999999999999999790977867240346035618411149408467364363417573258630000054836273193359375e-17
其中有88位有效小数,显然与上述维基语的索引相矛盾.任何人都可以澄清我是否应该误解某些事情?谢谢.
解决方法:
没有矛盾.如您所见,x的值在其十进制扩展的前7位是不正确的;在此之前我算了16个正确的数字. std :: setprecision不控制std :: cout输入的精度,它只显示你请求的数字.也许std :: setprecision的命名很差,应该用std :: displayprecision代替,但是std :: setprecision正在做它的工作.从语言学的角度来看,将std :: setprecision视为设置std :: cout的精度,而不是试图控制std :: cout参数的精度.
标签:c,floating-point,decimal,double,ieee-754 来源: https://codeday.me/bug/20190824/1712206.html