「小さな数値エラー」(前にsmallを指定する必要がある場合)を無視する方法で<、==、および>を実装する浮動小数点数の標準クラスはありますか?
私は自分でそのようなものを実装できることを知っていますが、多分私はそれを再発明する必要はありません。
「小さな数値エラー」(前にsmallを指定する必要がある場合)を無視する方法で<、==、および>を実装する浮動小数点数の標準クラスはありますか?
私は自分でそのようなものを実装できることを知っていますが、多分私はそれを再発明する必要はありません。
MathNET.Numericsライブラリには、要求された機能の多くを提供する静的なPrecisionクラスがあります。演算子のオーバーロードはありませんが、おそらく利用可能なメソッドで十分であることがわかります。
これはプログラミング手法としては不十分であり、利点がある限り、さまざまな状況に簡単に適応できないため、このために広く使用されているクラスやライブラリはありません。
等しくない数値を等しいものとして受け入れると、フォールスネガティブ(浮動小数点演算での丸めのために等しいものとして受け入れられないが、正確に計算された場合は等しい結果)が減少しますが、フォールスポジティブ(等しいものとして受け入れられるが等しくない場合は等しくない結果)が増加します。正確に計算されます)。誤検知の減少と誤検知の増加のバランスをとる一般的な原則はないため、この問題の一般的な解決策はありません。
さらに、さまざまな状況が発生します。浮動小数点エラーの大きさは結果の大きさに比例する可能性があるため、エラーの許容誤差は結果に比例する必要があります。または、大きさがほぼ絶対的である可能性があるため(結果に関して、おそらく問題の他の側面に対して)、エラーの許容範囲は固定数である必要があります。しきい値の片側のエラーは許容できるかもしれませんが、反対側のエラーは許容できないかもしれません(1の近くのアークサインまたはゼロの近くの平方根を取るときのように)。
誤検知を気にしない場合は、テストをtrue
に置き換えるだけで、すべての誤検知が排除されます。それが受け入れられない場合は、どの誤検知が受け入れられないかを判断する必要があります。
この決定は、実行している計算とその目的に大きく依存します。計算で発生する可能性のある丸め誤差、それらが結果にどのように影響するか、およびエラーがアプリケーションで許容できるかどうかを判断することが重要です。