2016-04-13 20 views

cevap

4

burada mesele değişmezleri, aslında bir ifadesi olarak çözümlenir olarak piton böyle (-0-0j) gibi karmaşık sayılar ayrıştırmak olmamasıdır: Yani

>>> import ast 
>>> ast.dump(ast.parse('(-0-0j)')) 
'Module(body=[Expr(value=BinOp(left=UnaryOp(op=USub(), operand=Num(n=0)), op=Sub(), right=Num(n=0j)))])' 

, bu karmaşık edebi ama int bir çıkarma değil ve karmaşık.

>>> -0-0j 
0j 
>>> (0j).__rsub__((0).__neg__()) 
0j 

int parçası

nedeniyle karmaşık bileşenlerinin çıkarma sonucundan signed zero bir 0j kompleksi bileşeninin sahip olduğu kabul edilir, ve daha sonra beklenen kaybetmek.'un sonucu, IEEE 754-2008 belirtildiği gibi pozitif işarete sahip olmalıdır.

Sıfırın işareti denklemlerin çözümlerini etkileyebileceğinden, bu bir ayrıştırıcı sorunudur. Ancak, sorun python izleyicide repeatedlyraised ve closed ve 'hata değil' olarak görünüyor, dolayısıyla bu davranış her an yakında gideceği gibi görünmüyor. Karmaşık sayıları başlatmanın güvenilir yolu, complex dahili numarasını çağırmaktır:

>>> 0-0j 
0j 
>>> 0+0j 
0j 
>>> complex(0, -0j) 
-0j 
>>> complex(0, +0j) 
0j 
İlgili konular