【发布时间】:2016-10-11 18:07:55
【问题描述】:
假设有两个数字 22 和 7。我想打印到答案的小数点后 100 位,它应该看起来像 3.1428571428571428571428571.... 而尝试使用
cout << setprecision(100) << fixed << (22.0/7.0);
我得到类似 3.142857142857142793701541449991054832935333251953125.......
【问题讨论】:
-
float和double在转换成十进制时都没有那么多有效数字。 Specifically,floathas roughly 7 decimal digits of precision, anddoublehas 16. -
你可能想试试像 gmp 这样的库。
-
不要混淆精度(你可以显示多少个小数位)和准确度(有多少个小数位是正确的。)一旦你超过了第十五位有效数字,你还不如随机附加数字。
-
@jaggedSpire 我添加了一个答案。我不知道如何以更好的格式将它放在 cmets 中。所以我放在那里。我收到 SEG 违规。我的问题是我们能不能把整个内容放在一个流中?
-
还要把事情放在上下文中:以质子半径 (~10 ^ -15 m) 为单位测量太阳系的直径 (4.5 * 10^12 m) 需要 28 个有效数字。即使您可以将一个数字表示为 100 个重要位置,但也不太清楚您为什么要这样做(除了在无意义的忙碌工作中进行练习。)
标签: c++ floating-point double floating-accuracy