Python浮点数大小比较的正确方法详解

请不要轻易直接比较浮点数的大小,因为这可能会出现非预期的结果。

引子

先来看个例子:

如果运行下面这段代码,您觉得会输出什么呢?

if (0.1 + 0.2) < 0.3:
    print('小于')

if (0.1 + 0.2) == 0.3:
    print('等于')

if (0.1 + 0.2) > 0.3:
    print('大于')

实际结果是输出:大于!

怎么样?和您想象得不一样吧?

我们再来看看下面这段代码:

print(0.1 + 0.2)

实际输出:0.30000000000000004

为什么不是我们想象的0.3呢?

浮点数的组成

在计算机中,一个浮点数是由符号位、指数位和尾数位三部分组成的,其中:

符号位:表示数字的正负。0代表正数,1代表负数。

指数位:表示数字的范围,即大小。在32位单精度浮点数中,指数占用8位;在64位双精度浮点数中,指数占用11位。

尾数位:表示数字的精确度,即精度。它是一个小数部分,通常是以1.xxxx的形式表示,其中1通常是隐含的(不实际存储,但在计算时假定存在)。在32位

作者:QMT量化交易

物联沃分享整理
物联沃-IOTWORD物联网 » Python浮点数大小比较的正确方法详解

发表回复