[英]Error while I use math.atan in Python!
當我在Python中執行1/2
,為什么會給我零? 即使我用float(1/2)
強制它,我仍然為零。 為什么? 我該如何解決呢?
當我給出arctan(1/2)
,答案為0,但是當我給出arctan(.5)
,答案正確!
由於Python 2.x對整數使用整數除法,因此:
1/2 == 0
評估為True。
您想做:
1.0/2
或做一個
from __future__ import division
首先, 1/2
是整數除法。 直到Python 3.0。
>>> 1/2
0
>>> 1.0/2.0
0.5
>>>
其次,將math.atan2
用於此類操作。
>>> math.atan2(1,2)
0.46364760900080609
>>> math.atan(.5)
0.46364760900080609
atan(float(1)/2)
如果您這樣做:
atan(float(1/2))
在Python 2.x中,但沒有:
from __future__ import division
首先將1/2評估為0,然后將0轉換為浮點數,然后調用atan(0.0)。 這在Python 3中有所改變,Python 3默認情況下甚至對整數也使用浮點除法。 簡短的便攜式解決方案是我首先提供的。
float(1)/float(2)
如果將int / int除以int,則float(0)仍為0.0
從標准:
/(除法)和//(地板除法)運算符產生其參數的商。 首先將數字參數轉換為通用類型。 普通或長整數除法會產生相同類型的整數; 結果是對結果應用了“底數”函數的數學除法運算。
正如這些答案所暗示的那樣,1/2不會返回您的期望。 它返回零,因為1和2是整數(整數除法會使數字四舍五入)。 順便說一下,Python 3改變了這種行為。
您的強制性沒有機會,因為在您將其浮動之前答案已經為零。
嘗試1./2
在Python中,將整數相除會產生一個整數-在這種情況下為0。
有兩種可能的解決方案。 一種是迫使它們浮動:1/2。 (請注意尾隨點)或float(1)/ 2。
另一個方法是在代碼頂部使用“來自將來的導入部門”,並使用所需的行為。
python -c'來自未來的進口部門;進口數學;打印math.atan(1/2)'產生正確的0.463647609001
如果1/2 == 0,則float(1/2)將為0.0。 如果您在被截斷后強制其浮動,則它仍會被截斷。
有幾種選擇:
from __future__ import division
。 這將使/運算符在該模塊中“正確”划分。 如果需要截斷除法,可以使用//。 float(1)/2
1.0/2
或1/2.0
或1.0/2.0
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.