二进制浮点数表示为十进制数

时间:2015-10-04 16:50:37

标签: binary floating-point numbers decimal ieee-754

并非所有十进制数都可以使用二进制浮点数精确表示。

http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html

  

有两个原因导致实数可能不完全正确   可表示为浮点数。最常见的情况是   以十进制数0.1表示。虽然它有限   十进制表示,二进制表示无限重复   表示。

另一种方式呢?如果使用足够的数字,是否可以使用十进制数精确表示每个 IEEE 754 浮点数?

1 个答案:

答案 0 :(得分:5)

是的,如果使用了足够的数字,每个有限的IEEE 754浮点数都会使用十进制数精确表示。

精度的每个附加二进制数字最多需要一个额外的十进制数字精确表示。

例如:

list = []
if dict.value in string:
    list.append(dict.key)
print(list) --> ["one", "one", "two", "three", "three"]

在精确表示点之后,1到2之间的双精度(binary64)数字只需要52个十进制数字:

0.1b   -> 0.5
0.01b  -> 0.25
0.11b  -> 0.75
0.001b -> 0.125

结果:

#include <stdio.h>

int main(void) {
  printf("%.55f\n", 1.1);
}

在上面的表示结尾处显示的四个之后全部为零。 1.100000000000000088817841970012523233890533447265625是最接近11/10的双精确值。

正如下面的评论中所指出的,负指数的每个附加单位也需要一个额外的十进制数字来准确表示。但是,大幅度的负指数在其十进制表示中具有前导零。最小的次正规数在点之后将有1022 + 52个十进制数字,但这些数字的第一个近1022 * log 10 (2)将为零。