10

decimal.Negate(myDecimal)と の間に違いはありますかmyDecimal * -1(おそらく読みやすさを除く)?

4

4 に答える 4

18

Negate単項マイナス演算子 ( ) があるため、存在すると思わop_UnaryNegationれます。演算子のオーバーロードをサポートしていない言語でも同じ結果が得られるように、同等の機能を表すメソッドを用意することをお勧めします。

と比較するのではなくmyDecimal * -1、別の書き方と考えてみるのもいいかもしれません-myDecimal

(これも最適化されていると思います。浮動小数点の動作を考えると、値の否定は通常の乗算​​よりもはるかに簡単です。反転するのは少しだけです。実際の演算を実行する必要はありません。)

于 2010-08-05T06:24:26.380 に答える
7

.NET Reflectorを使用して.NETソースを調べると、次のことがわかります:( 最終的に開くまでコーヒーを飲む..)

public static decimal Negate(decimal d)
{
    return new decimal(d.lo, d.mid, d.hi, d.flags ^ -2147483648);
}

10進数が内部的に機能する方法のため、これは-1と言うための空想的な方法のように見えます。

* -1を実行すると、次の呼び出しにマップされます。

FCallMultiply(ref result, yourNumber, -1M);

これにより、異なるILコードが生成される可能性があります。

于 2010-08-05T06:33:34.953 に答える
2

個人的には-myDecimal、どちらよりも読みやすいと思います (私は数学オタクではありませんが、3 つすべてが同等であると確信しています)。

それができない場合は、自分のコードにマジック ナンバーが飛び交うのを避けたいので、Negate を-1使用します。

于 2010-08-05T06:22:38.963 に答える
0

MSDN からdecimal.Negate:

指定された Decimal 値に負の 1 を掛けた結果を返します。

読みやすさは重要ですが、実質的な違いはありません。

于 2010-08-05T06:18:46.630 に答える