java - 为什么设计到iee754

标签 java c

<分区>

为什么高级编程语言(例如 Java、c)的浮点类型被设计为 float 或 double (IEEE 754)? float和double会导致数值逼近,从而导致精度损失(如0.3 - 0.2 = 0.099999),但在现实生活中,使用十进制编程比使用Floating-Point运算要好。

最佳答案

当前的高级语言使用 IEEE754 float ,因为大多数当前的硬件(例如 x86-64ARMPowerPC ...)具有内置(和有线)支持和 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/

相关文章:

c - 无法通过读取文件来填充结构数组

C 文件读取不正确

c - eclipse C 项目显示错误(无法解析符号)但它编译

java - 缓存和使缓存的 Mono 失效

java - 将 Cassandra BoundStatement 的 ResultSet 映射/转换/转换为使用对象映射 API 构建的 Java 类的最有效方法是什么?

java - Android项目中私有(private)变量使用getter和setter时

Java,JPanel 不显示在 JFrame 中,可能是并发问题?

java - Java中有互斥锁吗?

c - GCC:在 Mac Os 上链接 dylib

有人能帮我理解我教授发布的这段代码吗?