2010-09-17 68 views
0

在C++中, 对于浮点数给setprecision()后显示的随机数字是什么?Setprecision()为C++中的浮点数?

注:设置固定标志后。

例如:

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

我们得到剩下的7个位数的随机数?但双倍的情况并非如此。

回答

6

有两件事情需要注意的:

  1. float s的存储二进制文件。
  2. float最多有24个有效位。这相当于7.22有效数字。

因此,对于您的计算机,没有像3.14那样的编号。您可以使用float最接近3.1400001049041748046875。

double有53个有效位(〜15.95位有效数字),所以你可以得到更准确的近似值,3.140000000000000124344978758017532527446746826171875。 “噪音”数字不会与setprecision(10)一起显示,但会与setprecision(17)或更高显示。

1

他们并不是真正的“随机” - 他们是(最好的)小数二进制分数表示(是准确的只为分数分母为2的幂,例如,3.125显示究竟)。

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

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