Python 中,給 8 開三次方根出來的是乙個虛數,而不是 2,這怎麼辦?

時間 2021-06-02 11:14:35

1樓:陳炳好

這個簡單。先轉為正數,然後開立方,再乘回來a=-8b=-1

*(a<0)

+1*(

a>0)

#負數輸出-1,0輸出0,正數輸出1

print((

a*b)

**(1/

3)*b

)#輸出平方根

做成乙個函式也行

def方根(a

,n):b

=-1*(

a<0)

+1*(

a>0)

return(a

*b)**

(1/n

)*b然後呼叫

print(方根

(-8,

3))也可以這樣b=

-1ifa

<0else

1#負數輸出-1,正數輸出1

2樓:

數學不太懂,不過 double 型別的 1/3 在計算機裡是不能被精確表示的無限小數,雖然也是乙個有理數。可能需要各位數學家補充一下 y=(-8)^x 在 x=1/3 附近且 x 為有理數的函式影象

3樓:靈劍

如果2.999次方根和3次方根對應的結果不連續的話會很奇怪。如果都對齊到-2附近的話,那從2.

999次方根連續變動到2次方根,結果就會變成-i,那也很奇怪。所以選幅角最小的結果是乙個合理的做法。

至於說怎麼辦的話,那取決於你為什麼要對它開根號了。

4樓:Richard Xu

上次回答過MMA為什麼開方會得出負數:

Wolfram Alpha上,-27^(-1/3)的計算結果為什麼是乙個虛數?

道理其實是一樣的,在計算的時候程式預設選擇了輻角在 範圍內的主值分支,於是開立方之後得到的就是輻角為 的那個解。

5樓:追遠·J

這不是乙個Python問題,這是乙個數學問題。

Python直接使用**進行冪次運算時,遵守「根據可能結果的最大範圍,預設結果的資料型別」的規則。

比如這裡的1/3次方,底數是個負數,且指數不是整數,這就決定了最大的可能結果範圍是複數域,那就會按照複數的冪運算規則來做。

-8 = 8 * e^iπ,故

(-8)^(1/3) = (8 * e^iπ)^(1/3) = 2e^(iπ/3),

這個結果就是那個複數。

換句話說,這個運算子支援的是一般的冪運算,不是用來給你開方的。

想開立方,請使用cbrt函式,但是這個函式標準庫的math裡面沒有,非要用的話numpy裡面是有的,但有點大炮打蚊子的意思

6樓:江流

你用的是math庫的pow函式吧,pow需要傳入兩個引數,其中底數是int型,不帶符號。需要你自行調整正負號。

import math

r=-math.pow(8,1/3)

print(r)

7樓:科先生

你怎麼開的立方?

可以試試這樣寫:-8

**(1/

3)#輸出2.0

如果你這樣寫就會出現你所說的虛數的問題:(-8)**(

1/3)

#輸出(1.0000000000000002+1.7320508075688772j)

python的負數操作最好先做正數操作,再處理符號,不然會出一些問題,因為負數的表示有其特殊的地方。

符號可以根據指數的分子來確定,也就是乘以-1的指數分子次方。如指數是1/3就是乘以(-1)^1次方,2/3就是乘以(-1)^2次方。

Python中,多執行緒,多程序,非同步三種提高效率的方式,在生產環境中的應用?

if io bound if io slowprint Use Asyncio elseprint Use multi threading else if cpu bound print Use multi processing PegasusWang cpu 密集的一般用 Cython 或者像是 ...

如何理解《三體》中「給歲月以文明,而不是給文明以歲月。」的含義

巨陽仙尊 衣冠之美謂之華,源遠流長謂之夏。二者不可得兼,要華不要夏。我不但想活得好,還想活的長,二者不可得兼,我捨棄長壽也要活得好。抽菸喝酒影響健康,但我就是想抽想喝。沉迷女色我願意,做鬼也風流。再引申,還可以有更令人動容的解釋 寧可少活二十年,拼命也要拿下大油田 砍頭不要緊,只要主義真 寧為玉碎,...

三體中給歲月以文明而不是給文明以歲月是否違背宇宙社會學第一條生存是文明的第一需求

柏言 這句話是乙個價值觀的闡述 你是要過美好燦爛而又短暫的人生,還是要過苦逼殘酷的長壽人生。是像司馬懿那樣苟且到大後期,還是像項羽那樣輝煌一陣然後凋謝。每個人的看法和選擇不一樣,選擇文明還是選擇歲月,就跟選擇良心還是選擇目標一樣,兩類人,一類是理性派的章北海 邏輯 維德,另一類感性派就是程心,追求正...