我修了一些关于机器学习的课程,我试图理解这个计算问题:
variable = 1000000000 #1 billion
for i in xrange(1000000):
variable = variable+ 1e-6 #0.000001
variable = variable -1000000000 #1 subtracts with 1 billion again
variable
#>> 0.95367431640625
应该是1
但结果是0.95367431640625
有人能告诉我为什么会这样吗?你知道吗
Tags:
Python数学本身不能处理任意精度。如果您想得到更精确的结果,似乎需要使用
decimal
模块,即使这样,也要小心:bad_x
变成“错误”值的原因是它首先对1000000000
和1e-6
进行了常规的ython加法,这就遇到了浮点问题,然后取了那个(错误的)值并将其传递给Decimal
——损害已经造成了。你知道吗对于您的用例,看起来您可以在加/减之前将值转换成
Decimal
s,因此您应该可以毫无问题地获得所需的结果。你知道吗你正在失去精确性。这是因为Python中的
float
实现了double floating point
精度,它只能保证精度达到15/16位。你知道吗当您这样做时:
连续不断地,您正在突破精度限制,在
0.000001
中的最后一个1
之后还有一些其他值,它仅表示为0.000001
。这样就得到了累积误差。你知道吗如果你将你的
variable
初始化为0
,事情会有所不同。这是因为在计算中:虽然
0.000001
的实际值并不完全是0.000001
,但第16位的不精确性与有效数字相差甚远:也可以使用
decimal
值而不是double
来避免错误:相关问题 更多 >
编程相关推荐