【发布时间】:2011-08-24 02:08:58
【问题描述】:
众所周知,decimal fractions(如 0.1),当存储为 floating point(如 double 或 float)时,将在内部以“二进制格式”(IEEE 754)表示。并且有些小数部分不能直接用二进制格式表示。
我不明白的是,这个“转换”的精度:
1.) 浮点本身可以有精度(即“显着”)?
2.) 而且从十进制小数到二进制小数的转换也有精度损失?
问题:
从十进制分数转换为浮点分数时,最坏情况下的精度损失是多少(对于“所有”可能的十进制分数)?
(我想知道这一点的原因是,在将小数与二进制/浮点小数进行比较时,我需要考虑精度......以确定两个数字是否相同。我希望这个精度为尽可能紧密/精确(decimal fraction == binary fraction +/- precision)
示例(仅假设)
0,1 dec => 0,10000001212121212121212 (binary fraction double) => precision loss 0,00000001212121212121212
0,3 dec => 0,300000282828282 (binary fraction double) => precision loss 0,000000282828282
【问题讨论】:
-
这是绝对差异,还是百分比差异?您的示例显示了绝对差异,但在 某些 情况下找到最大百分比差异情况可能更有意义。
-
你好,德兰,非常好的观点。也许百分比精度损失会更相关?
-
请避免使用多个问号。一个就够了。
标签: java math floating-point decimal fractions