gpt4 book ai didi

java - 为什么 0.2(以 10 为底)不能用二进制表示为 0.10(以 2 为底)

转载 作者:行者123 更新时间:2023-12-02 03:29:08 25 4
gpt4 key购买 nike

我一直在阅读有关 java 中的浮点类型的信息,例如 double。我还阅读了有关将分数转换为二进制以及如何执行此操作的信息。我可以计算一下,发现用二进制表示 0.2 的近似值如下:

0.00110011001100...

但是 2 的二进制是 10。那么为什么我不能直接说 0.2(以 10 为底)等于 0.10(以 2 为底)呢?

我读过类似的question ,但我仍然对此感到困惑

另一个例子是 5.8

101.110011001100...

为什么我们不能这样做:101.1000,因为二进制中的 8 是 1000

我知道 0.10 和 0.1000 是相同的,但在这种情况下它们是分开的。

最佳答案

因为这与不同基数的数字表示方式不一致:

如果您有一个二进制数,例如1100.101,它用基数2表示,因此为了将其转换为基数10,您需要执行以下操作:

... 2^3   2²   2^1  2^0  .  2^-1   2^-2   2^-3 ...
1 1 0 0 . 1 0 1

这意味着您有2^3 + 2² + 2^-1 + 2^-3 = 以 10 为基数的数字

请注意,指数总是从左到右减少一个。所以基本上,当您向右移动一位数字时,您将除以基数,在本例中除以 2

这就是数字在任何给定基数 B 中的表示方式。对于B,你有

... B^3   B²   B^1  B^0  .  B^-1   B^-2   B^-3 ...

对于您的示例,这意味着:

0.2 = 2 * 10^-1   //base 10 (= 0.2 in base 10)
0.2 = 2 * 2^-1 //base 2
0.1 = 1 * 10^-1 //base 10
0.1 = 1 * 2^-1 //base 2 (= 0.5 in base 10)

这就是为什么基数 10 中的 0.2 不是,并且不能是基数 2 中的 0.1

您甚至自己说过,0.100.1000 在您的表示中是不同的数字。 (这不仅没有任何意义,而且对任何计算机来说都是一场噩梦)

关于java - 为什么 0.2(以 10 为底)不能用二进制表示为 0.10(以 2 为底),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38336163/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com