1

負の数をベースとして指数計算を実行する場合、値を含む変数ではなく生の値を使用すると、一貫性のない結果が返されます。

IRBの場合:

1.9.3p194 :001 > -4.5 ** 0.5
 => -2.1213203435596424 
1.9.3p194 :002 > foo = -4.5
 => -4.5 
1.9.3p194 :003 > foo ** 0.5
 => (1.2989340843532398e-16+2.1213203435596424i) 
1.9.3p194 :004 > (-4.5) ** 0.5
 => (1.2989340843532398e-16+2.1213203435596424i) 

何が得られますか?明らかに、コンパイラーはとして解釈-4.5 ** 0.5して-(4.5 ** 0.5)いますが、変数を使用するときの動作が異なるのはなぜですか?

4

4 に答える 4

4

それは最初の行を

-(4.5 ** 0.5)

これにより、4.5の負の平方根が得られます。2番目の式は次の式に相当します

(-4.5) ** 0.5

したがって、複雑な答えです。

于 2013-01-10T21:11:31.523 に答える
3

演算子の優先順位のため。べき乗**は最も高い精度を持っています。したがって、最初に正の数を上げてから0.5、期待するものの代わりにそれを否定します。ただし、2番目のケースでは、fooはすでに-4.5存在するため、否定が優先されます。

于 2013-01-10T21:12:39.527 に答える
2

あなたの質問が優先順位についてではなく、なぜfooそれが一度割り当てられるのかについての質問がと-4.5に分解できない場合、答えはあまりにも明白です。これは、すべてのプログラミング言語とすべての自然言語、および数学表記を含む、システムのようなすべての言語に共通する非常に基本的な機能です。あるオブジェクトが評価/計算されると、それは1つのことです。戻って複数の部分として再解釈することはできません。言語ができることは(それが自然であろうとプログラミングであろうと)、単一のオブジェクトとして受け取り、それを他の部分とさらに連結して、より大きな意味を計算することです。一度評価/計算されたものに戻って分解することはありません。-4.5xx

自然言語では、これは構成要素と呼ばれます。一連の単語foo bar bazがとして解釈される場合[foo bar] baz、戻っfoo [bar baz]て同時に解釈することはありません。

数学では、の計算値(foo bar) bazがに等しい場合がありますが、それは結合foo (bar baz)法則と呼ばれる特別なプロパティを適用することによってのみであり、値が同じになる場合でも、それらは異なることを意味します。さらに、結合性は一般的には成り立ちません。

于 2013-01-10T21:25:31.977 に答える
0

**演算子の優先順位は。よりも高くなり-ます。これは、あなたがよりよく知っているかもしれない演算子の例です。

1 + 2 * 3  => 7

x = 1 + 2  => 3

x * 3      => 9
于 2013-01-10T21:23:55.713 に答える