我编写了一个程序来使用 Gregory Leibniz 公式估算 pi,但是,它不会计算到小数点后 18 位。它最多只能计算 5 个小数点。有什么建议么?
2 回答
利用
cout.precision(50);
提高打印输出的精度。这里 50 是输出中的小数位数。
精度指定小数点字符后出现的确切位数。默认精度为 6
类似地,当std::cout
引入 C++ 时,使用相同的默认值
管理由 执行的浮点输出的精度(即生成多少位数)
std::num_put::do_put
。
- 返回当前精度。
- 将精度设置为给定的精度。返回前一个精度。
由 建立的默认精度
std::basic_ios::init
为 6。
因此,无论类型多么精确,都只会打印出 6 个小数位。要获得更多数字,您需要使用std::setprecision
或std::cout.precision
但是调用只影响输出std::cout.precision
中的小数位数,而不影响数字的实际精度。超过该类型精度的任何数字都只是垃圾
大多数现代系统使用 IEEE-754,其中23 位尾数float
是单精度double
的,而尾数是 52 位的双精度。因此,它们分别精确到 ~6-7 位和 ~15-16 位十进制数字。这意味着它们不能像您预期的那样将数字表示为小数点后 18 位
在某些平台上可能有一些扩展精度类型,因此您将能够更精确地存储数字。例如long double
,在 x86 上的大多数编译器上,精度为 64 位,可以表示 ~18 位有效数字,但它不是小数点后的 18 位数字。在某些编译器上,可以通过四倍精度获得更高的精度。要达到更高的精度,唯一的方法是使用一个大数字库或为自己编写一个。