3
我从wikipedia是双号最多有15-17显著十进制数字15位二进制64位小数?
然而,对于低于
double x = std::pow(10,-16);
std::cout<<"x="<<std::setprecision(100000)<<x<<std::endl;
(为了测试它,使用this online shell),我得到了简单的C++程序学
x=9.999999999999999790977867240346035618411149408467364363417573258630000054836273193359375e-17
其中有88个重要的十进制数字,显然与Wiki的上述声明相矛盾。任何人都可以澄清我应该误解的东西吗?谢谢。
这些数字中的大部分都*不*显着;他们中的大多数无法区分这个值与下一个最大或最小可能的“双”值。 –
@大卫:我投票重新开放(没有意识到我的投票由于我的金徽章...);我认为这不是[标准的“为什么FP被破坏?” - 类型的问题](http://stackoverflow.com/questions/588004/is-floating-point-math-broken);它是在询问标准精确索赔和'setprecision'行为之间的明显差异。 –
@OliverCharlesworth我相信这是一个老问题,就像往常一样,关于可表示性 –