Single Precision和Double Precision IEEE 754基2浮点值可以表示整数范围,而不会丢失。
[乘积A = BC
,其中B
和C
是无损表示为浮点值的整数,如果乘积A
在数学上落在浮点类型的无损范围内,则它总是无损吗?
更具体地说,我们是否知道普通的现代处理器是否可以确保对乘积进行计算,以使整数乘积具有如上所述的作用?
编辑:为了澄清每个链接,可以无损失表示的整数范围在双精度中为+ -2 53,在单精度中为+ -16777216。
编辑:IEEE-754要求将操作四舍五入到最接近的可表示精度,但我特别想了解现代处理器的行为
对于任何基本运算,IEEE-754要求,如果数学结果是可表示的,那么它就是结果。
该问题没有用IEEE-754标记,因此通常只询问浮点数。当精确的结果可表示时,没有一个明智的系统会给出不准确的结果,但是仍然有可能创建一个准确的结果。
让我们专注于IEEE-754单精度。
在此代码中,尾数使用23 + 1位编码,不需要编码的位数不超过24位的整数可以用浮点数精确表示(即,其绝对值在1到2 ^ 24-1范围内的整数)。
但是,在此范围之上,其他整数也可以精确编码。例如2 ^ 24或2 ^ 30 + 2 ^ 28。
通常,确定数字是否可以正确编码的不是范围,而是整数代码中1的数目和分布。如果考虑数字的二进制表示形式,并且调用k最左边的位的索引为1和l最右边的位的索引为1,则如果
,则可以对整数进行精确编码k − l <= 23
k <= 127(具有遵守SP标准的指数)
这些是| A | = M×2 ^ e形式的整数,其中M <2 ^ 24和A <2 ^ 128。
如果我们做两个数字A和B的乘积,并假设| A |,|| [[B | <2 ^ 24,则所有可能]
A
A
k
A |,| B | <2 ^ 24,如果| A×B | <2 ^ 24,A×B] >可以精确编码。如果| A×B |≥2^ 24,则可能会进行无损编码,但通常不正确。当然,当尾数为52 + 1位时,这可以扩展为双精度。
如果处理器遵守IEEE-754标准,则它完全独立于处理器体系结构。它取决于IEEE-754标准定义数字代码的方式。