ちょうどC#の学習を開始しました。数値解法を含む重い数学シミュレーションに使用する予定です。問題は、比較するときだけでなく、double
を追加したり引いたりするときに精度の低下が生じることです。コードとその返信内容(コメント内)は次のとおりです。C#の倍精度精度の損失、減算の倍数を加算するときの精度の低下
namespace ex3
{
class Program
{
static void Main(string[] args)
{
double x = 1e-20, foo = 4.0;
Console.WriteLine((x + foo)); // prints 4
Console.WriteLine((x - foo)); // prints -4
Console.WriteLine((x + foo)==foo); // prints True BUT THIS IS FALSE!!!
}
}
}
助けと説明がありがとう!
私が困惑しているのは、(x + foo)==foo
です。True
です。
'=='演算子を使って浮動小数点を比較することはお勧めしません。どのように進めるべきかについては、[この投稿](https://stackoverflow.com/questions/3874627/floating-point-comparison-functions-for-c-sharp)を参照してください。 –
@Marceloありがとう!答えにあったリンクを投稿することができますか(浮動小数点を比較する機能)?私はそれが非常に便利だと思う。 –
私のコメントにもあります。 –