浅谈DoubleFloat


在计算机中Double/Float是按照二进制存储的,10进制可以用有限位数字表示的小数对于二进制都是不能用有限位表示的,例如: 十进制里面一位小数的0.1~0.9对于二进制除了0.5以外都不能用有限位表示。 0.1(十进制) = 0.0001100110011001100110011001100110011001100110011001100…(二进制),这个1100是无限循环的 (这个网站可以查看十进制和二进制之间的转换结果 http://coderstoolbox.net/number/)

这造成一些问题:

判断小数相等很可能会失效,例如:0.1==(0.5-0.4)在大部分语言中不成立 虽然每次的误差都很小,但经过加减乘除之后误差会累积