3

IDLEからの次の出力は、私には意味がありません。

>>> a=-1.0
>>> a**(1/3)
1.0
>>> a==-1.0
True
>>> -1.0**(1/3)
-1.0

2つの理論的に同等のステートメントが異なる結果を返すのはなぜですか?Python(2.7)__pow__は、これが結果であるdoubleのメソッドをどのように処理していますか?整数でも試してみたところ、同じ結果が得られました。関数への入力の符号を計算__pow__して結果にコピーする以外に、これを修正するにはどうすればよいですか?

4

1 に答える 1

6

これは、オペレーターの優先順位の問題です。

>>> -1.0**(1/3)
-1.0
>>> (-1.0)**(1/3)
1.0

また、 Python 3.xの動作(および)を提供するから(1/3)インポートしない限り、これはゼロであることに注意してください。フロートとして1/3を取得するために使用します。division__future__ValueError1/3.

于 2013-02-14T15:50:56.510 に答える