什么定义了何时应该对无限二进制数 (0.1) 进行截断以用科学计数法表示它

What defines when truncation should occur on an infinite binary number (0.1) to represent it in a scientific notation

我正在尝试了解无限二进制数(例如 0.1)如何以科学记数法表示并最终以浮点数表示。网上有很多例子可以解释科学记数法中的数字如何以二进制浮点形式表示,但我的问题具体是关于用科学记数法表示无限二进制数。我不明白的是,既然 0.1 不能用二进制表示,那么什么时候应该截断呢?

例如,如果我们将 0.1 的无限表示截断为 62 位:

0.00011001100110011001100110011001100110011001100110011001100110

科学形式将是:

1.1001100110011001100110011001100110011001100110011001100110 x 2-4

所以从这里如果我们想将数字表示为 64 bit double precision floating point,我们可以计算指数为 -4 + 1023 = 1019 并将数字表示为:

0 1111111011 1001100110011001100110011001100110011001100110011001

*从科学形式转换时,我将尾数截断为 52 位。

在上面的示例中,我决定截断为 62 位。但我可以截断到更少或更多的位 - 这是如何决定的?

首先你应该四舍五入,而不是截断。您四舍五入(到 "nearest even")到浮点格式中的位数。双精度有 53 位,因此四舍五入为 53 位。对于 0.1,你得到

1.100110011001100110011001100110011001100110011001101 * 2^-4

IEEE格式,即

0 01111111011 1001100110011001100110011001100110011001100110011010

(值由我 decimal to floating-point converter 提供)