Roh*_*ena 2 floating-point precision binary decimal floating-accuracy
简而言之,我的问题是,为什么浮点数中的舍入误差仅在计算后显示而不是存储文字?
我的意思是这个 - 我知道由于从十进制转换为二进制和返回时浮点数的舍入错误而产生的问题.
例如,在Java中:
double a = 10.567;
double b = 2.16;
double c = a * b;
Run Code Online (Sandbox Code Playgroud)
c然后存储值22.824720000000003,而不是22.82472.
这是因为结果22.82472无法准确存储在double类型的有限二进制数字中.但是,10.567和2.16(即a和b)都不能.
但是如果我打印a和b的值,它们就会被打印出来,没有任何舍入错误.为什么舍入错误不会显示在这里?
这是否意味着浮点文字的表示与浮点计算结果的表示有某种不同?
文字转换中存在舍入误差,它恰好隐藏在你身上.10.567不能用二进制表示,所以它舍入到最接近的可表示double值
10.56700000000000017053025658242404460906982421875
然而,算法打印尽可能少的数字,而不是打印确切的值(这将是相当烦人的),如果它被转换回二进制,它将给出相同的值(在这种情况下是"10.567").
事实证明,对于doubles,您可以对任何最多15位的小数执行此操作,请参阅http://www.exploringbinary.com/number-of-digits-required-for-round-trip-conversions/.