Aad*_*hah 0 floating-point type-conversion double-precision ieee-754 single-precision
将数字从双精度浮点格式转换为单精度浮点格式会导致精度损失.用于实现此转换的算法是什么?
数字是大于3.4028234e+38
还是小于-3.4028234e+38
简单地减少到各自的限制?我觉得转换过程比这更复杂,但我找不到它的文档.
最常见的浮点格式是IEEE 754标准中规定的二进制浮点格式.我会回答你关于这些格式的问题.在标准的新(2008)版本中也有十进制浮点格式,并且存在除IEEE 754标准之外的格式,但754二进制格式是迄今为止最常见的格式.有关舍入的一些信息以及标准的链接位于此维基百科页面中.
将双精度转换为单精度与处理任何操作的结果相同.(例如,加法,乘法或平方根具有精确的数学值,并且该值根据规则舍入以产生从操作返回的结果.出于转换的目的,输入值是精确的数学值,并且它是圆的.)
通常,计算环境具有一些默认的舍入模式.(各种编程语言可以提供更改默认舍入模式的方法,或者特别针对每个操作指定它.)默认舍入模式通常是舍入到最接近的.其他的是圆向零,向正向无穷大(向上),向圆向负无穷大(向下).
在舍入到最近模式中,返回最接近精确值的可表示数字.如果存在平局,则返回具有偶数低位(在其分数或有效位数中)的数字.为此,无穷大有效地表现为它是有限数模式中的下一个值.在单精度中,最大有限数为0x1.fffff8p127,0x1.fffffap127,0x1.fffffcp127和0x1.fffffep127.(单精度有效数字中有24位,因此该位中的一步是最后一个十六进制数字的2步.)为了舍入,无穷大就像在0x2p128那样.因此,如果确切的结果更接近0x1.fffffep127(因此,小于0x1.ffffffp127),则将其舍入为0x1.fffffep127.如果它大于或等于0x1.ffffffp127,则舍入为无穷大.负无穷大的情况是对称的.
在round-to-infinity模式中,返回大于或等于精确值的最接近的可表示值.因此,0x1.fffffep127以上的任何值都会舍入到无穷大.Round-towards-negative-infinity返回最接近的可表示值,该值小于或等于精确值.Round-to-zero返回朝向零的方向上最接近的可表示值.
IEEE 754标准仅规定了结果; 它没有指定算法.用于实现舍入的方法取决于每个实现.