我试图理解无限二进制数,例如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位。但我可以截断到更少或更多位 - 如何决定?
答案 0 :(得分:2)
首先,你应该四舍五入,而不是截断。您将浮点格式的位数(到"最近的偶数")舍入。双精度有53位,所以舍入到53位。如果你得到0.1
1.100110011001100110011001100110011001100110011001101 * 2 ^ -4
以IEEE格式,即
0 01111111011 1001100110011001100110011001100110011001100110011010
(价值观由我decimal to floating-point converter提供。)