4

この例のビルトイン演算子4**(1/2)(平方根演算)が期待どおりでは1なく、結果として返されるのはなぜですか? 2許容できる結果が返されない場合はエラーが発生するはずですが、Python はクラッシュすることなく動作を続けます。少なくとも Python 2.7.4 64 ビット ディストリビューションでは。

エラーなしpow(4,1/2)で返される数学関数でも発生します。1

代わりに、実行4**(0.5)すると正しい結果が返されますが2.0、警告なしで整数と浮動小数点数が混在しています。同じことがパウでも起こります。

この動作の説明はありますか? それらはバグと見なされますか?

4

2 に答える 2

9

1/2両方のオペランドが整数であるため、浮動小数点除算ではなく除算を使用します。

>>> 1/2
0

浮動小数点値を使用するか、演算子が常に浮動小数点除算を使用from __future__ import divisionする Python 3 の動作に切り替えるために使用します。/

>>> 1/2.0
0.5
>>> 4**(1/2.0)
2.0
>>> from __future__ import division
>>> 1/2
0.5
>>> 4**(1/2)
2.0
于 2013-08-15T10:22:37.583 に答える
1

1/20.5は答えとして与えますが、それはint/intであるため を返します。intしたがって、 を切り捨てて.5を返します0。結果を得るにはfloat、いずれかの数値が でなければなりませんfloat。したがって、次のことを行う必要があります。

>>> 4 ** (1.0/2)
2.0

これは完全に機能します。これを試すこともできます:

>>> math.pow(4,1.0/2)
2.0

または、これを試すこともできます:

>>> math.sqrt(4)
2.0
于 2013-08-15T11:16:58.477 に答える