decimal.Negate(myDecimal)
と の間に違いはありますかmyDecimal * -1
(おそらく読みやすさを除く)?
4 に答える
Negate
単項マイナス演算子 ( ) があるため、存在すると思わop_UnaryNegation
れます。演算子のオーバーロードをサポートしていない言語でも同じ結果が得られるように、同等の機能を表すメソッドを用意することをお勧めします。
と比較するのではなくmyDecimal * -1
、別の書き方と考えてみるのもいいかもしれません-myDecimal
。
(これも最適化されていると思います。浮動小数点の動作を考えると、値の否定は通常の乗算よりもはるかに簡単です。反転するのは少しだけです。実際の演算を実行する必要はありません。)
.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コードが生成される可能性があります。
個人的には-myDecimal
、どちらよりも読みやすいと思います (私は数学オタクではありませんが、3 つすべてが同等であると確信しています)。
それができない場合は、自分のコードにマジック ナンバーが飛び交うのを避けたいので、Negate を-1
使用します。