关于IEEE-754单精度浮点,你如何执行舍入到最近,在所需位置(默认和最常见的模式)中绕到最近的偶数位?
基本上我有保护位,圆位和粘滞位 . 因此,如果我们将它们组成一个向量并将其称为GRS,则以下规则适用:
如果 G = 0 ,向下舍入(什么都不做)
G = 0
如果 G = 1 , RS == 10 或 RS == 01 ,向上舍入(向尾数添加一个)
G = 1
RS == 10
RS == 01
if GSR = 111 ,round to even
GSR = 111
所以我不知道如何进行最接近的回合 . 任何帮助是极大的赞赏 .
为了确保我们在同一页面上, G 是三个中最重要的位, R 接下来, S 可以被认为是最低有效位,因为它的值部分代表了被截断的更低有效位在计算中 . 这三个位仅在进行计算时使用,并且在计算之前或之后不存储在浮点变量中 .
G
R
S
这是你应该做的,以便使用 G , R 和 S 将结果舍入到最接近的偶数:
GRS - 行动0xx - 向下舍入=什么都不做(x表示任何位值,0或1)100 - 这是 tie :如果 G 之前的尾数位是1,则向上舍入,否则向下舍入=什么都不做101 - 向上舍入110 - 向上舍入111 - 向上舍入
通过在 G 之前的尾数的最低有效位位置将尾数加1来完成舍入 . 如果尾数溢出(它将存储的23个最低有效位变为零),则必须向指数加1 . 如果指数溢出,则根据数字符号将数字设置为无穷大或无穷大 .
在平局的情况下,如果尾数是奇数,则在尾数中加1,如果是偶数,则不添加任何内容 . 这就是使结果四舍五入到最接近的偶数值的原因 .
只是想补充说 S 位不仅仅是 GR 位之后的一点 . 如果在 GRS 位之后有可用位,则它实际上是那些逻辑 OR ,包括 S 位 .换句话说,如果 GR 位后面的任何位是 1 ,则 S 位值将为 1 .
当一组位低于您保持的精度时,请考虑以下内容进行舍入:
如果您保留的最低有效位为0,则只需将0x7ff .... f添加到舍入位 .
如果您保留的最低有效位为1,则只需将0x800 .... 0添加到舍入位 .
我认为这只实现了一次测试所需的行为 .
3 回答
为了确保我们在同一页面上,
G
是三个中最重要的位,R
接下来,S
可以被认为是最低有效位,因为它的值部分代表了被截断的更低有效位在计算中 . 这三个位仅在进行计算时使用,并且在计算之前或之后不存储在浮点变量中 .这是你应该做的,以便使用
G
,R
和S
将结果舍入到最接近的偶数:GRS - 行动
0xx - 向下舍入=什么都不做(x表示任何位值,0或1)
100 - 这是 tie :如果 G 之前的尾数位是1,则向上舍入,否则向下舍入=什么都不做
101 - 向上舍入
110 - 向上舍入
111 - 向上舍入
通过在
G
之前的尾数的最低有效位位置将尾数加1来完成舍入 . 如果尾数溢出(它将存储的23个最低有效位变为零),则必须向指数加1 . 如果指数溢出,则根据数字符号将数字设置为无穷大或无穷大 .在平局的情况下,如果尾数是奇数,则在尾数中加1,如果是偶数,则不添加任何内容 . 这就是使结果四舍五入到最接近的偶数值的原因 .
只是想补充说 S 位不仅仅是 GR 位之后的一点 . 如果在 GRS 位之后有可用位,则它实际上是那些逻辑 OR ,包括 S 位 .
换句话说,如果 GR 位后面的任何位是 1 ,则 S 位值将为 1 .
当一组位低于您保持的精度时,请考虑以下内容进行舍入:
如果您保留的最低有效位为0,则只需将0x7ff .... f添加到舍入位 .
如果您保留的最低有效位为1,则只需将0x800 .... 0添加到舍入位 .
我认为这只实现了一次测试所需的行为 .