Setprecision()用于C ++中的浮点数?

时间:2010-09-17 16:04:53

标签: c++ types

在C ++中, 为浮点数提供 setprecision ()后显示的随机数是什么?

注意:设置固定标志后。

示例:

float f1=3.14;
cout < < fixed<<setprecision(10)<<f1<<endl;

我们得到其余7位数的随机数?但双重情况并非如此。

2 个答案:

答案 0 :(得分:6)

要注意两件事:

  1. float以二进制文件存储。
  2. float最多有24位有效位。这相当于7.22有效数字。
  3. 因此,对于您的计算机,没有3.14这样的数字。使用float最接近的是3.1400001049041748046875。

    double有53位有效位(~15.95有效数字),因此得到更准确的近似值,3.140000000000000124344978758017532527446746826171875。 “噪音”数字不会显示setprecision(10),但会显示setprecision(17)或更高。

答案 1 :(得分:1)

它们并非真正“随机” - 它们是该二进制分数的(最佳可用)十进制表示(仅对分母为2的幂的分数是精确的,例如3.125 < em>将完全显示。)

当然,这取决于可用于表示二进制小数的位数,该二进制小数最接近您最初作为文字输入的小数,即单次与双精度浮点数。

并非真正的C ++特定问题(适用于使用二进制浮点数的所有语言,通常用于利用机器的底层硬件,即大多数语言)。对于非常简单的教程,我建议阅读this