在IEEE 754中,有一种将浮点数值四舍五入的“最近舍入”方法。
但是我不理解定义中的一个条款:
如果两个最接近的可表示值同样接近,则选择其最低有效位为零的那个。
什么是“选择其最低有效位为零的那个”?
但是我不理解定义中的一个条款:
如果两个最接近的可表示值同样接近,则选择其最低有效位为零的那个。
什么是“选择其最低有效位为零的那个”?
b bbbbbbbb bbbbbbbbbbbbbbbbbbbbbbb
b bbbbbbbbbbb bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
这里的b是0或1。 第一组对应于数字的符号。 第二组对应于数字的指数,包括8位(单精度)和11位(双精度)。 第三组对应于数字的尾数,由23位(单精度)和52位(双精度)组成。
因此,对于单精度数字,数字的最低有效位是尾数的第23位,对于双精度数字是尾数的第52位。这是数字的最右边的位。如果这个位是零,它将被选择。
注意: 偶数和奇数仅针对整数值定义。 因此,如果舍入函数只将数字舍入到整数值,则此规则退化为“四舍五入至偶数规则”。
感谢大家的努力。
#include <stdio.h>
#include <stdlib.h>
int main(int c, char *v[]) {
double d = 0x1.000001p0;
for (int i = 0; i < 10; i++) {
printf("double-precision:%.6a\n"
"single-precision:%.6a\n\n",
d, (float) d);
d += 0x0.000002p0;
}
}
double-precision:0x1.000001p+0 single-precision:0x1.000000p+0
double-precision:0x1.000003p+0 single-precision:0x1.000004p+0
double-precision:0x1.000005p+0 single-precision:0x1.000004p+0
double-precision:0x1.000007p+0 single-precision:0x1.000008p+0
double-precision:0x1.000009p+0 single-precision:0x1.000008p+0
double-precision:0x1.00000bp+0 single-precision:0x1.00000cp+0
double-precision:0x1.00000dp+0 single-precision:0x1.00000cp+0
double-precision:0x1.00000fp+0 single-precision:0x1.000010p+0
double-precision:0x1.000011p+0 single-precision:0x1.000010p+0
double-precision:0x1.000013p+0 single-precision:0x1.000014p+0
012345678
,在这种情况下,8是最低有效位。它是改变数字最少的位(或数字)。将#8
加一,只会增加这个数字。将#0
加一,将使其增加10000000
。现在,位被存储为0001 0010
,之前的只是一个例子。这样做对你有帮助吗? - Emz