私は2つの勾配を見つけ、それらを比較してそれらが等しいかどうかを確認するプログラムに取り組んでいます。私はこれにダブルスを使用しています。私のスロープは「等しい」はずなのに、少しずれているので、等しいとは表示されていないことがわかりました。たとえば、1.0000000000000009と0.999999999999999の1つの勾配を取得します。したがって、理論的には等しいはずですが、そうではありません。
これを修正するにはどうすればよいですか?
double を使用している場合、これを修正することはできません。10 進数の表現方法には制限があり、計算全体で累積され、これらの小さな違いが生じます。適切なコード監査では、double 間の等値について実際に警告します。
これを処理する 1 つの方法は、差の絶対値が設定した特定の制限内にあることを確認することです。
これは、浮動小数点数の表現と比較の危険性に関する記事です。
または、 などの正確な数値処理のために、より優れたクラスに切り替えることもできますBigDecimal
。
2 つの勾配を比較するには、いくつかの PRECISION_LEVEL を設定してから、次のように比較します。
final double PRECISON_LEVEL = 0.01;
if(Math.abs(slope1 - slope2) < PRECISION_LEVEL) {
System.out.println("Equal");
}
else {
System.out.println("Not Equal");
}