3

最初のケースで肯定的な結果が得られ、2番目のケースで否定的な結果が得られた理由を誰かが説明できますか.

auto r1 = -3.0L;
auto r2 = 2.0L;
writeln(typeid(r1)); // real 
writeln(typeid(r2)); // real 
writeln(typeid(r1 ^^ r2)); // real
writeln(r1 ^^ r2); // 9

writeln(typeid(-3.0L)); // real
writeln(typeid(2.0L)); // real
writeln(typeid(-3.0L ^^ 2.0L)); // real
writeln(-3.0L ^^ 2.0L);  // -9
4

2 に答える 2

5

免責事項: 私は D を知りません。これは、他の言語を使用した私のバックグラウンドで書かれています。

負の数 (実数) を 2 乗すると、その数は正になります。あなたは(人間にとって)あいまいな表現を書いています:

-3^2

これは、次のいずれかを意味します。

  • -(3^2) = -9また
  • (-3)^2 = 9

出力から判断すると、プログラミング言語の演算子の優先順位は最初のものを選択していると思います。最後の行を次のように置き換えてみてください。

writeln((-3.0L) ^^ 2.0L);  // -9
于 2012-05-21T05:43:07.950 に答える
2

上記のソースに間違いはありません。古き良き FORTRAN でさえ、優先順位が最も高いべき乗演算子があります (例については、 http://h21007.www2.hp.com/portal/download/files/unprot/fortran/docs/lrm/lrm0067.htmを参照してください)。したがって、べき乗演算子を持つほとんどすべての最新のプログラミング言語では、式-3^2は として評価され-(3^2)ます。

このルールは数式でも同じです: http://en.wikipedia.org/wiki/Order_of_operations#Exceptions_to_the_standard

于 2012-05-21T17:46:40.137 に答える