用小数表示二进制出现的问题?

今天看了一道面经题,问题如下:

请你解释为什么会出现4.0-3.6=0.40000001这种现象?

想要解答这道题,其实需要知道在计算机中任何关于数的计算都是以二进制进行的,就比如上面的式子,首先它是需要浮点数,存在整数部分和小数部分,那么计算机在处理该类型的数据时,首先整数部分转化为二进制,再把小数部分转化为二进制,当然计算机在处理的过程当中肯定是一步到位的,只不过对于我们自己来说,需要整数和小数拆开来处理,不会乱,把他们都转化为二进制之后再进行运算,运算之后的结果在转化为十进制,那么我觉得就是转化的过程当中出现了误差。

1.首先我们来看整数部分,假如现在我有一个浮点数是36.9,那么对于整数部分36它的二进制是这样表示的:
在这里插入图片描述
2.接着我们看小数部分:
在这里插入图片描述
那从小数部分来看的话,其实就发现了问题了,在小数整乘2的过程当中,有一部分是陷入了循环的,也就说对于0.9这个小数,它的小数二进制表示为:111001-11001-11001-11001…就这样无限循环下去。

其实这样的规律就好比十进制当中的1/3,也是一个无限循环小数,这是一样的道理。

因此这就可以很好的解释前面提出的那个问题了,正是因为小数可能无法精确的用二进制表示出来,所以在运算的过程当中,如果真的出现了这样的情况,那么就很有可能发生4.0-3.6=0.40000001这样的结果。(当然如果小数可以成功的用二进制表示出来的话,那么结果就是标准的了)

猜你喜欢

转载自blog.csdn.net/qq_41486775/article/details/109908356