如何将双精度浮点数转换为单精度浮点格式



将数字从双精度浮点格式转换为单精度浮点格式会导致精度损失。实现这种转换的算法是什么?

大于3.4028234e+38或小于-3.4028234e+38的数字是否简单地减少到各自的极限?我觉得转换过程比这更复杂,但我找不到它的文档。

最常见的浮点格式是IEEE 754标准中指定的二进制浮点格式。我将回答您关于这些格式的问题。新的(2008)版本的标准中也有十进制浮点格式,也有IEEE 754标准以外的格式,但754二进制格式是迄今为止最常见的。一些关于舍入的信息,以及标准的链接,都在这个维基百科页面上。

将双精度转换为单精度的处理方式与对任何运算的结果进行舍入的处理方式相同。(例如,加法、乘法或平方根有一个精确的数学值,根据规则对该值进行四舍五入,以产生运算返回的结果。为了进行转换,输入值是精确的数学数值,并进行四舍五入。)

通常,计算环境具有一些默认的舍入模式。(各种编程语言可能提供更改默认舍入模式的方法,或在每次操作时指定默认舍入模式。)默认舍入模式通常是四舍五入到最接近。其他的是向零取整,向正无穷大取整(向上),向负无穷大取整数(向下)。

在四舍五入模式中,返回与精确值最接近的可表示数字。如果出现平局,则返回偶数低位(小数或有效位)的数字。为此,无穷大的作用就好像它是有限数模式中的下一个值。在单精度中,最大的有限数为0x1.fffff8p127、0x1.fffffap127、0x1.ffffcp127和0x1.fffffep127。(单精度有效位中有24位,因此该位中的步长是最后一个十六进制数字中的2的步长。)为了取整,无穷大的作用就像它在0x2p128。因此,如果精确结果更接近0x1.fffffp127(因此,小于0x1.fffff p127),则将其四舍五入为0x1.fffffep127。如果它大于或等于0x1.ffffp127,则将其四舍五入到无穷大。负无穷大的情形是对称的。

在向无穷大取整模式中,返回最近的可表示值,该值大于或等于精确值。因此,任何高于0x1.fffffep127的值都会舍入到无穷大。向负无穷大取整返回最近的可表示值,该值小于或等于精确值。向零取整将返回向零方向上最接近的可表示值。

IEEE 754标准仅规定了结果;它没有指定算法。用于实现四舍五入的方法取决于每个实现。

最新更新