对于以下程序,我得到的精度损失为1,我无法理解。需要帮助。
void main()
{
typedef std::numeric_limits< double > dbl;
cout.precision(dbl::digits10);
double x = -53686781.0;
float xFloat = (float) x;
cout << "x :: " << x << "\n";
cout << "xFloat :: " << xFloat << "\n";
}
Outpput:
x :: -53686781
xFloat :: -53686780
答案 0 :(得分:6)
53686781在二进制文件中看起来像这样:11001100110011000111111101。那是26位。
你的浮点数在其尾数部分最多只能存储24位,因此,你最终会在其中存储110011001100110001111111。最后两个二进制数字01被截断。
而11001100110011000111111100是53686780。
就这么简单。
答案 1 :(得分:0)
对于普通浮点数,我认为p = 23,它给出了2 ^ 23的数字精度(大约7位数已经提到过.Double有p = 52,它给出2 ^ 52的数字精度(大约15位)。
wiki页面实际上相当不错。