誤差ジャッジに以下の不具合があるように思われます。
- 想定出力が小数で提出の出力が整数の場合に WA と判定される
- 例:想定出力が
2.0、提出の出力が 2 だった場合に WA となる
- 想定解が小数で
0.0 の場合に WA と判定される
原因としては、以下の関数に不備があると思っています
|
func compareValue(answer string, solution string, accuracy float64) bool { |
|
_, err := strconv.Atoi(solution) |
|
if err == nil || err.(*strconv.NumError).Err == strconv.ErrRange { |
|
return answer == solution |
|
} |
|
numberC, err := strconv.ParseFloat(solution, 64) |
|
if err == nil { |
|
numberA, err := strconv.ParseFloat(answer, 64) |
|
return err == nil && math.Abs((numberC-numberA)/numberC) <= accuracy |
|
} |
|
return answer == solution |
|
} |
- 提出解の出力が整数にパースできてしまう場合、文字列比較をしてしまうので、想定解が小数で提出解が整数の場合に WA と判定されているのだと思っています。
- 想定出力と提出解の出力が共に整数にパースできるときのみ文字列比較、で基本的には問題なさそうなのですが、厳密には想定解が
1000000000、提出解が 1000000001 で誤差ジャッジをしたい時に困るかもしれないです(そんなことはなさそうですが)
math.Abs((numberC-numberA)/numberC) <= accuracy で提出解の出力が 0.0 の時に NaN が発生し常に false となるので、想定解が小数で 0.0 の場合に 0.0 と出力すると WA と判定されるのだと思っています。
- そもそも相対誤差だと
0.0 が解のときに誤差許容を行うことができないので、絶対誤差もしくは相対誤差が x 以下、とすべきなのかもしれません
誤差ジャッジに以下の不具合があるように思われます。
2.0、提出の出力が2だった場合に WA となる0.0の場合に WA と判定される原因としては、以下の関数に不備があると思っています
mojacoder/mojacoder-backend/judge-image/check.go
Lines 13 to 24 in 4337133
1000000000、提出解が1000000001で誤差ジャッジをしたい時に困るかもしれないです(そんなことはなさそうですが)math.Abs((numberC-numberA)/numberC) <= accuracyで提出解の出力が0.0の時に NaN が発生し常に false となるので、想定解が小数で0.0の場合に0.0と出力すると WA と判定されるのだと思っています。0.0が解のときに誤差許容を行うことができないので、絶対誤差もしくは相対誤差が x 以下、とすべきなのかもしれません