このコードを実行すると、デバッガーを使用する場合と使用しない場合、およびリリース構成とデバッグ構成で異なる結果が得られる可能性があると強く思います。
最初のバージョンでは、2 つの式を比較しています。C# 言語では、これらの式をソース型よりも高い精度の算術演算で評価できます。
2 番目のバージョンでは、加算結果をローカル変数に代入しています。一部のシナリオでは、結果が強制的に 32 ビットに切り詰められ、結果が異なります。他のシナリオでは、CLR または C# コンパイラは、ローカル変数を最適化できることを認識します。
C# 4 仕様のセクション 4.1.6 から:
浮動小数点演算は、演算の結果の型よりも高い精度で実行できます。たとえば、一部のハードウェア アーキテクチャは、型よりも範囲と精度が高い「拡張」または「long double」浮動小数点型をサポートし、double
すべての浮動小数点演算をより高い精度の型で暗黙的に実行します。このようなハードウェア アーキテクチャで精度の低い浮動小数点演算を実行するには、パフォーマンスが過度に犠牲になる必要があります。C# では、パフォーマンスと精度の両方を犠牲にする実装を要求するのではなく、すべての浮動小数点演算に高精度の型を使用できます。より正確な結果が得られる以外に、これが測定可能な効果をもたらすことはめったにありません。
編集:私はこれをコンパイルしようとはしていませんが、コメントで、Chris は実行時に最初のフォームがまったく評価されていないと言っています。上記はまだ適用できます (言葉遣いを少し調整しました) - 定数の評価時間を実行時間からコンパイル時間にシフトしただけです。有効な評価と同じように動作する限り、それは私には問題ないように思えます。したがって、コンパイラ自体の定数式の評価でも、より高精度の算術演算を使用できます。