r444で直しました。
絶対誤差を機械イプシロンと比較しているため、10 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 == 11では誤差が大きすぎて真にならない。それと比較演算で誤差を配慮していないので、0.15 + 0.15 < 0.1 + 0.2が真になってしまう。
r456で直しました。
相対誤差だけで比較しているため、今度は非常に小さな値の等値比較がおかしくなっています。絶対誤差と相対誤差のどちらかを満たしているときに、等値であると見なすようにr477で直しました。
のときif (a == b)が真にならない。if (a - b)は0なので偽になるはずが真になる。
これは浮動小数点のまるめ誤差が原因で起こる。浮動小数点同士を直接比較せずに、その差が機械イプシロン以下であるときに等しいと判定しなければならない。