Python的一个奇怪的计算结果

时间:2014-03-04 18:55:38

标签: python numpy

我写了一个crule1.py如下。

 def exp_rule1 (mu1, h, alpha):
     return h**2/(4*mu1**2)

然后我在口译员中运行它。我得到了

Python 2.7.6 |Anaconda 1.9.1 (64-bit)| (default, Nov 11 2013, 10:49:15) [MSC v.1500 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.

Imported NumPy 1.8.0, SciPy 0.13.3, Matplotlib 1.3.1
Type "scientific" for more details.
>>> import crul1 as c1
>>> c1.exp_rule1(1, 1, 0)
0

然后我将代码复制到解释器中。结果是

>>> def  exp_rule1 (mu1, h, alpha):
...      return h**2/(4*mu1**2)
... 
>>> exp_rule1(1, 1, 0)
0.25

这让我非常困惑,我无法解决它。非常感谢您在此代码中指出问题。

2 个答案:

答案 0 :(得分:2)

在Python 2.x中,/如果两个操作数都是整数,则返回一个整数值。作为一种特殊情况,如果n/d n < d为0,则def exp_rule1 (mu1, h, alpha): return h**2/(4*mu1**2) 为0。

有关

4

您希望确保分子或分母是浮点值。一种简单的方法是使def exp_rule1 (mu1, h, alpha): return h**2/(4.0*mu1**2) 成为浮点而不是整数。

/

另一个解决方案是为//导入新的3.x行为,无论操作数如何,总是返回一个浮点数。如果这样做,请用# This allows 1/2 to return 0.5 instead of 0 from __future__ import division 替换所有依赖整数除法的除法。

{{1}}

答案 1 :(得分:0)

问题是你在混合整数和浮点数。尝试拨打电话exp_rule1(1.0, 1.0, 0.0)即可获得正确的结果。只需确保该函数的所有参数都是浮点数。