在C ++中, 为浮点数提供 setprecision ()后显示的随机数是什么?
注意:设置固定标志后。
示例:
float f1=3.14;
cout < < fixed<<setprecision(10)<<f1<<endl;
我们得到其余7位数的随机数?但双重情况并非如此。
答案 0 :(得分:6)
要注意两件事:
float
以二进制文件存储。float
最多有24位有效位。这相当于7.22有效数字。因此,对于您的计算机,没有3.14这样的数字。使用float
最接近的是3.1400001049041748046875。
double
有53位有效位(~15.95有效数字),因此得到更准确的近似值,3.140000000000000124344978758017532527446746826171875。 “噪音”数字不会显示setprecision(10)
,但会显示setprecision(17)
或更高。
答案 1 :(得分:1)
它们并非真正“随机” - 它们是该二进制分数的(最佳可用)十进制表示(仅对分母为2的幂的分数是精确的,例如3.125
< em>将完全显示。)
当然,这取决于可用于表示二进制小数的位数,该二进制小数最接近您最初作为文字输入的小数,即单次与双精度浮点数。
并非真正的C ++特定问题(适用于使用二进制浮点数的所有语言,通常用于利用机器的底层硬件,即大多数语言)。对于非常简单的教程,我建议阅读this。