相关疑难解决方法(0)

浮点数学是否破碎?

请考虑以下代码:

0.1 + 0.2 == 0.3  ->  false
Run Code Online (Sandbox Code Playgroud)
0.1 + 0.2         ->  0.30000000000000004
Run Code Online (Sandbox Code Playgroud)

为什么会出现这些不准确之处?

language-agnostic math floating-point floating-accuracy

2798
推荐指数
28
解决办法
28万
查看次数

为什么4*0.1的浮点值在Python 3中看起来不错,但3*0.1不是?

我知道大多数小数都没有精确的浮点表示(浮点数学是否被破坏?).

但我不明白为什么4*0.1打印得很好0.4,但3*0.1不是,当两个值实际上都有丑陋的十进制表示时:

>>> 3*0.1
0.30000000000000004
>>> 4*0.1
0.4
>>> from decimal import Decimal
>>> Decimal(3*0.1)
Decimal('0.3000000000000000444089209850062616169452667236328125')
>>> Decimal(4*0.1)
Decimal('0.40000000000000002220446049250313080847263336181640625')
Run Code Online (Sandbox Code Playgroud)

python floating-point rounding floating-accuracy ieee-754

154
推荐指数
4
解决办法
1万
查看次数