因为我们设置精度为16位,每16位以上的数字。但是,正如你所看到的,这些数字肯定不精确到16位数!
浮点型的变量通常有一个精度约7位有效数字(这就是为什么一切后,许多数字在我上面的回答是垃圾)。double类型的变量通常有大约16位有效数字精度。double类型的变量命名为因为他们提供一个浮动的精度约一倍。
现在让我们考虑一个非常大的数字:
1
2
3
4
5
6
7
8
9
|
#include <iostream>
int
main()
{
using
namespace
std;
float
fValue = 123456789.0f;
cout << fValue << endl;
return
0;
}
|
23457e + 008。1.23457×10 ^ 8,这是123457000。请注意,我们已经失去了精度也在这里!
因此,必须使用时,需要比浮点数变量可以容纳更多的精密小心。
舍入误差
其中一个原因浮点数字可以棘手的是,由于非显而易见的二进制和十进制之间的差异(基地10)数。在正常的小数,分数1 /第三是无限小数的顺序:0 333333333……同样,考虑分数1 / 10。在十进制中,这是很容易的为0.1,和我们所想的0.1作为一个容易表示数。然而,在二元,0.1是由无限序列表示:0.0001100110011001…
你可以看到在下面的程序的影响:
1
2
3
4
5
6
7
8
|
#include <iomanip>
int
main()
{
using
namespace
std;
cout << setprecision(17);
double
dValue = 0.1;
cout << dValue << endl;
}
|