2011-07-11 9 views
5

私は(私はうまくいけば正しく1.1.0に相当し、理解して何から)"x * = -1"を使用する利点"x * = -1"以上?

a = 1. # later on, `a` is multiplied by other floats 
x *= -1. 

のような行が含まれているいくつかのPython numpyのコード、で探しています。

a = 1およびx *= -1以上の理由はありますか?私がaxを整数で後で分けているなら、私はそれを理解することができます。浮動小数点数にキャストするのを忘れる心配はありません。他の理由はありますか?例えば

私はaがfloatとして終わるために起こっていることを知っていれば、それだけで最初からfloatとしてそれを初期化するために、パフォーマンス上の理由で良いですか?または、これはわかりやすくするためです(axはともに浮動小数点数であることを明示しています)。

+1

おそらく明快さとバグ回避の両方のためです。 –

答えて

6

わかりやすく説明しています。

浮動小数点数を整数倍すると、パフォーマンスが低下する(整数を浮動小数点数に変換する)可能性がありますが、これはコンパイラによって異なります。また、十分なペナルティをかけてはいけません多くの)。

ただし、明確にするために点数を間違いなく明らかにしています。最終的には、実際に浮動小数点数に浮動小数点数を掛けているため、この事実を隠す理由はありません。 axが浮動小数値の場合は浮動小数値にしてください。

1

自己尊重のコンパイラは、定数を適切な型に昇格させます。違いは化粧品だけです。

+2

しかし、Pythonのコンパイラは何か面白いことをするのが難しくはありません。コンパイラは賢明なコンパイラを持っているかなりの言語であっても、(特に答えが意味するように)異なるセマンティクスをもたらすなら、コンパイラは式のタイプを変えることはできません。それは全く違う問題です。 – delnan

+0

Infact Blindyは、コンパイラが式の型を変更するのではなく、単に定数を宣言すると言っています。 Pythonで他の言語のように、そのような変換がランタイムに関係していると私は驚くでしょう! – Mapio

+0

@eryksyn:あなたは正しいです!あまりにも多くのCプログラミング(そして教授)の年は、Pythonで(静的/コンパイル時)型のvarsを話すことを非センセにしているという事実を忘れてしまった。 – Mapio

0

私が検出できる出力には違いはありません。

>>> float(1.*-5.*0.*-1.).hex() 
'0x0.0p+0' 
>>> float(1.*-5.*0.*-1).hex() 
'0x0.0p+0' 
>>> float(1.*5.*0.*-1.).hex() 
'-0x0.0p+0' 
>>> float(1.*5.*0.*-1).hex() 
'-0x0.0p+0' 
>>> 
関連する問題