众所周知,小数
(如 0.1),当存储为 float
(如 double 或 float)时,将在内部以“二进制格式”表示(IEEE 754 ).还有一些小数不能直接用二进制表示。
我不明白的是这种“转换”的精度:
1.) float 本身可以有精度(即“重要”)?
2.) 但是从小数到二进制小数的转换也有精度损失?
问题:
从小数转换为 float 时,最坏情况下的精度损失(对于“所有”可能的小数)是多少?
(我想知道这一点的原因是,在将小数部分与二进制/浮点分数进行比较时,我需要考虑精度......以确定两个数字是否相同。我希望这个精度与尽可能紧凑/精确 (十进制小数 == 二进制小数 +/- 精度)
示例(仅假设)
0,1 dec => 0,10000001212121212121212 (binary fraction double) => precision loss 0,00000001212121212121212
0,3 dec => 0,300000282828282 (binary fraction double) => precision loss 0,000000282828282
最佳答案
我不完全清楚你在追求什么,但你可能对以下论文感兴趣,该论文讨论了二进制/十进制转换中涉及的许多准确性问题,包括疑难案例列表。
弗恩·帕克森和威廉·卡汉。 用于测试 IEEE 十进制-二进制转换的程序。 1991 年 5 月 22 日 http://www.icir.org/vern/papers/testbase-report.pdf
关于java - 浮点运算 = 从 Dec 到 Binary 的最差精度/差异是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7169700/