当前位置: 首页 > 面试题库 >

浮点数加法-得到奇怪的结果。

骆昊阳
2023-03-14
问题内容

执行以下代码时:

public class FPoint {
    public static void main(String[] args) {
        float f = 0.1f;
        for(int i = 0; i<9; i++) {
            f += 0.1f;
        }
        System.out.println(f);
    }
}

显示以下输出:

1.0000001

但是输出应该是 1.0000000 ,对吧?如我错了请纠正我..!!


问题答案:

对于IEEE 754标准,0.1并不是真正的“ 0.1”。

0.1编码为:(0 01111011 10011001100110011001101带有浮点数)

  • 0是符号(=正)
  • 01111011指数(= 123-> 123-127 = -4 (127是IEEE 754中的 偏差 ))
  • 10011001100110011001101尾数

若要将尾数转换为十进制数,我们需要1.10011001100110011001101 * 2 ^ -4 (base2)[IEEE
754中1.xxx是隐式的]

= 0.000110011001100110011001101(base2)

= 1/2 ^ 4 + 1/2 ^ 5 + 1/2 ^ 8 + 1/2 ^ 9 + 1/2 ^ 12 + 1/2 ^ 13 + 1/2 ^ 16 + 1/2
^ 17 +1 / 2 ^ 20 + 1/2 ^ 21 + 1/2 ^ 24 + 1/2 ^ 25 + 1/2 ^ 27(以10为基)

= 1/16 + 1/32 + 1/256 + 1/512 + 1/4096 + 1/8192 + 1/65536 + 1/131072
…(base10)

= 0.10000000149011612 (base10)



 类似资料:
  • 问题内容: 我已经将其输入python shell: 我期望0.1 * 0.1不是0.01,因为我知道以10为底的0.1是周期性的,以2为底。 我已经看过20个以上的字符,因此我希望能得到20个。为什么我得到4? 好吧,这解释了为什么我给了我4,但为什么回归? 为什么不回合?(我已经阅读了这个答案,但是我想知道他们如何决定何时对浮点数进行取整,以及何时对不进行浮点取整) 因此,浮子的准确性似乎是一

  • 这是我的代码: 注意:scanf内部的\n是我防止尾随换行符问题的方法。这不是最好的解决方案,但我使用它太多了,目前它正在成为我的习惯。:-) 我的预期输入和程序结果是: 输入: 对于输出,它不是打印回89,而是显示以下输出: 我用的是MSYS2包的g (GCC) 4.9.1。我注意到了g,因为我的代码中有一部分正在使用C STL。 已编辑:我通过使用标准而不是更改了我的代码,这是我的预期输入和程

  • 当试图从Hitbox API获取数据时,我得到了一个奇怪的结果。对于一个API的命令,这种情况每次都会发生,而对于另一个API的命令,这种情况只是有时发生。结果差不多是这样(这是我得到的最后一个结果): \U001F\B\0\0\0\0\0\U0003W8SμMU~S N T&N G6C$Z%9IGF[(\U0005\U000F(:6\U000F\B P C\U0015\N\U007F V\U00

  • 问题内容: 因此,当我在Java中使用Doubles进行加法或减法时,它会给我带来奇怪的结果。这里有一些: 如果我加上,它给了我。没错 如果我添加,它会给我(重复s 的数量可能会关闭)。错了 如果我减去,它就会给我(再次,重复的s可能会关闭)。错了 起初我以为这只是将双精度数与十进制值相加的问题,但我错了。以下工作正常: 现在,添加的第一个数字是保存为变量的双精度数,尽管第二个变量从捕获文本。例如

  • 考虑以下代码: 不管我怎么看,这种下溢似乎都没有意义。正如维基百科所说, 下溢是计算机程序中的一种情况,其中计算结果的绝对值比计算机实际存储在CPU内存中的数值小。 但很明显,计算机能够存储与所讨论的值大致接近的数字,因此定义似乎与我在这里看到的行为完全不一致。 有人能解释一下为什么其中一些会产生下溢而另一些不会吗? 这是正确的行为还是错误?

  • 问题内容: 我对为什么该操作有效感到非常困惑。有人可以解释吗? 为了澄清起见,我正在尝试将字符串与变量进行比较。我已经知道要修复可以随便附上in s中的代码 我想知道这是PHP错误,服务器错误还是某种有效的操作。根据此操作 无效 。 编辑: 从头开始,显然它确实提到字符串和0之间的松散比较是正确的。但是我仍然不知道为什么。 编辑2: 我修改了我的问题,为什么值不起作用? 问题答案: 从PHP手册: