mojacoder icon indicating copy to clipboard operation
mojacoder copied to clipboard

誤差ジャッジの不具合

Open riantkb opened this issue 3 years ago • 14 comments

誤差ジャッジに以下の不具合があるように思われます。

  • 想定出力が小数で提出の出力が整数の場合に WA と判定される
    • 例:想定出力が 2.0、提出の出力が 2 だった場合に WA となる
  • 想定解が小数で 0.0 の場合に WA と判定される

原因としては、以下の関数に不備があると思っています https://github.com/makutamoto/mojacoder/blob/4337133c3e8de271d64fd70e84d63246e2368fb6/mojacoder-backend/judge-image/check.go#L13-L24

  • 提出解の出力が整数にパースできてしまう場合、文字列比較をしてしまうので、想定解が小数で提出解が整数の場合に WA と判定されているのだと思っています。
    • 想定出力と提出解の出力が共に整数にパースできるときのみ文字列比較、で基本的には問題なさそうなのですが、厳密には想定解が 1000000000、提出解が 1000000001 で誤差ジャッジをしたい時に困るかもしれないです(そんなことはなさそうですが)
  • math.Abs((numberC-numberA)/numberC) <= accuracy で提出解の出力が 0.0 の時に NaN が発生し常に false となるので、想定解が小数で 0.0 の場合に 0.0 と出力すると WA と判定されるのだと思っています。
    • そもそも相対誤差だと 0.0 が解のときに誤差許容を行うことができないので、絶対誤差もしくは相対誤差が x 以下、とすべきなのかもしれません

riantkb avatar Mar 29 '21 09:03 riantkb