1

これが私のコードです:

Real AB = adj[a].get(b);
System.out.println("AB " + AB);
Real AC = adj[a].get(c);
System.out.println("AC " + AC);
Real BC = adj[b].get(c);
System.out.println("BC " + BC);
System.out.println(AB.plus(BC));
System.out.println(AB.plus(BC).equals(AC));

出力は次のとおりです。

AB 2.2360679775
AC 6.7082039325
BC 4.4721359550
6.7082039325
false

数値は同じなのに、なぜ false を返すのでしょうか? 私も試してみました

System.out.println(AB.plus(BC).compareTo(AC) == 0);

再び、false

4

1 に答える 1

2

仮数、誤差、指数が同一かどうかをチェックするためのequals()実装。Real代わりに、approximates()「考えられるエラー (数値エラーなど) を考慮に入れる」を使用してください。

補遺: 浮動小数点の比較に関しては、次の記事も参照してください。

于 2014-05-15T08:34:00.613 に答える