在python中使用等式的错误答案

时间:2013-06-21 09:53:00

标签: python math python-2.7

尝试使用Wolphram Alpha - 这是正确的结果。

尝试使用python 2.7.x:

u = 4/3 * 6.67*1e-11*3.14*6378000*5515
print (u)  

答案是7.36691253546

这里有什么不对?

2 个答案:

答案 0 :(得分:6)

整数除法。 <{1}}在向下舍入时评估为1。

使用4/3代替强制浮点运算:

4.0

或使用Python 3,其中浮点除法是默认值,或者使用>>> 4.0/3 * 6.67*1e-11*3.14*6378000*5515 9.822550047279998 在Python 2中实现相同的目标:

from __future__ import division

此行为记录在Binary arithmetic operators section

  

Python 2.7.5 (default, May 22 2013, 12:00:45) [GCC 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.11.00)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> from __future__ import division >>> 4/3 * 6.67*1e-11*3.14*6378000*5515 9.822550047279998 (除法)和/(地板除法)运算符产生其参数的商。数字参数首先转换为通用类型。普通或长整数除法产生相同类型的整数;结果是数学除法的结果,“floor”函数应用于结果。除以零会引发//异常。

请参阅PEP 238,了解在Python 3中更改此行为的原因,以及对ZeroDivisionError语句的引用。

答案 1 :(得分:3)

问题是Python 2.7中的整数除法4/3

>>> print (4.0/3) * 6.67*1e-11*3.14*6378000*5515
9.82255004728

在Python 3中(其中/是浮动除法而//是整数除法)这可以在不将其更改为4.0/3的情况下工作,或者您可以使用

from __future__ import division