簡體   English   中英

在Python中使用math.atan時出錯!

[英]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
  • 如果您實際上在使用常量,則只需添加一個小數點而不是使用float(),例如: 1.0/21/2.01.0/2.0

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM