Java 为什么设计为iee754

Java 为什么设计为iee754,java,c,Java,C,为什么高级编程语言(如Java、c)将浮点类型设计为浮点或双精度(IEEE 754)?Float和double将导致数值近似,这会导致精度损失(例如,0.3-0.2=0.099999),但在现实生活中,使用十进制编程比使用浮点运算更有效。当前的高级语言使用IEEE754浮点数,因为大多数当前的硬件(例如…)都有内置的(和有线)支持和电路。切换到其他表示形式将极大地扩展性能(可能慢10倍,因为每个操作都应该由软件模拟)。 此外,IEEE浮点标准是经过精心设计和制作的(它代表了与以前的浮点表示法相比

为什么高级编程语言(如Java、c)将浮点类型设计为浮点或双精度(IEEE 754)?Float和double将导致数值近似,这会导致精度损失(例如,0.3-0.2=0.099999),但在现实生活中,使用十进制编程比使用浮点运算更有效。

当前的高级语言使用IEEE754浮点数,因为大多数当前的硬件(例如…)都有内置的(和有线)支持和电路。切换到其他表示形式将极大地扩展性能(可能慢10倍,因为每个操作都应该由软件模拟)。 此外,IEEE浮点标准是经过精心设计和制作的(它代表了与以前的浮点表示法相比的一个真正的进步,如上…)

换成以10为基数(或其他一些基数)表示也不会有多大帮助。你仍然会遇到你提到的舍入问题

也许您的应用程序应该正在使用。请使用提供它们的现有库


的集合(或)是无限的(参数)。无论你怎么做,你都不能在有限的计算机上精确地表示它。阅读一些数学教科书……

当前的高级语言使用IEEE754浮点数,因为大多数当前的硬件(例如……)都有内置的(和有线的)切换到其他表示的支持和电路将极大地扩展性能(可能慢10倍,因为每个操作都应该由软件模拟)。 此外,IEEE浮点标准是经过精心设计和制作的(它代表了与以前的浮点表示法相比的一个真正的进步,如上…)

换成以10为基数(或其他一些基数)表示也不会有多大帮助。你仍然会遇到你提到的舍入问题

也许您的应用程序应该正在使用。请使用提供它们的现有库


的集合(或)是无限的(参数).不管你怎么做,你都不能在有限的计算机上精确地表示它。阅读一些数学教科书……

传统上,所有浮点运算都是为执行数学计算而设计的,因此大多数处理器都支持这种方式。所有类型的十进制运算都可以使用现有的数字运算符轻松实现,而且确实如此使用时不需要任何额外的硬件支持

浮点操作需要额外的硬件支持,因为使用常规方法会消耗大量处理器周期。 因此,从早期的处理器设计开始,实现了特定的硬件子集,以支持称为浮点数字协处理器的浮点运算。
它们包含特殊寄存器,以IEEE浮点标准双扩展精度格式存储数字。

传统上,所有浮点运算都是为执行数学计算而设计的,因此大多数处理器都支持这种方式。使用现有的数字运算器可以轻松实现各种十进制运算操作员,使用时不需要任何额外的硬件支持

浮点操作需要额外的硬件支持,因为使用常规方法会消耗大量处理器周期。 因此,从早期的处理器设计开始,实现了特定的硬件子集,以支持称为浮点数字协处理器的浮点运算。
它们包含特殊寄存器,以IEEE浮点标准双扩展精度格式存储数字。

许多年前,各种浮点格式的使用更为普遍,包括以2、10和16为基数的系统。对于普通数学,以2为基数通常比其他形式更精确、更高效特别是,在基数2中,我们可以设置正常数的指数,将数字的前导位移到单位位置(小数点左侧的第一位)。这允许我们消除显式存储的位。在其他基数中,有效位(分数)字段需要位来显示前导位

“很好”十进制数字通常只出现在人类人工构造的地方,比如把一个货币单位分成100个部分。它们通常不会出现在自然界中:当你精确测量一个自然物体的质量或两个物体的电引力时,这个值不是一个简单的十进制数字。因此,为了支持一般的数学al,decimal不提供优势

即使在人类的构造中,十进制的用途也是有限的。十进制算法通常不能准确地表示“二得一自由销售”中某一商品的有效单价、将一种货币转换为另一种货币的结果或复合利率。因此,无论使用二进制还是十进制浮点,都会出现舍入错误,即理解算术系统和设计软件以提供所需的结果是很重要的,尽管存在这些错误。十进制算术并不能自动解决执行精确计算的问题


1985年,IEEE发布了浮点标准(IEEE 754),这是非常成功的;许多硬件供应商采用了它,并将其构建到他们的硬件中。因此,许多编程语言也采用了它,通过在许多实现中明确或简单地从硬件继承它。1985年的IEEE 754标准规定了二进制浮点。2008年的版本也规定了十进制浮点许多年前,各种浮点格式被更广泛地使用,包括基数为2、10和16的系统。对于普通数学来说,基数2通常比其他基数更精确、更有效。特别是在基数2中,我们总是可以设置正常数的指数将数字的前导位移到单元位置(第一个