<分区>
为什么高级编程语言(例如 Java、c)的浮点类型被设计为 float 或 double (IEEE 754)? float和double会导致数值逼近,从而导致精度损失(如0.3 - 0.2 = 0.099999),但在现实生活中,使用十进制编程比使用Floating-Point运算要好。
<分区>
为什么高级编程语言(例如 Java、c)的浮点类型被设计为 float 或 double (IEEE 754)? float和double会导致数值逼近,从而导致精度损失(如0.3 - 0.2 = 0.099999),但在现实生活中,使用十进制编程比使用Floating-Point运算要好。
最佳答案
当前的高级语言使用 IEEE754 float ,因为大多数当前的硬件(例如 x86-64 、 ARM 、 PowerPC ...)具有内置(和有线)支持和 IEEE-754 电路。切换到其他一些 floating point 表示形式将在性能方面极其广泛(可能慢 10 倍,因为每个操作都应由软件模拟)。 此外,IEEE 浮点标准经过精心设计和制作(并且代表了相对于以前的浮点表示的真正进步,例如 IBM mainframes ...)
切换到以 10 为基数(或其他一些基数)表示不会有太大帮助。您仍然会遇到您提到的舍入问题。
也许您的应用程序应该使用 bignums 。使用提供它们的现有库。
field 的集合(或 real numbers )是 uncountably 无限( Cantor diagonalization 参数)。无论你怎么做,你都不能在有限的计算机上准确地表示它。阅读一些数学教科书....
关于java - 为什么设计到iee754,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20898377/