From a0f4acffdc76a5f4211f8227f7fe00a9628743d0 Mon Sep 17 00:00:00 2001 From: Matistjati Date: Mon, 25 May 2026 03:44:12 +0200 Subject: [PATCH 1/2] Make default validator output relative error --- .../default_validator/default_validator.cc | 20 +++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/support/default_validator/default_validator.cc b/support/default_validator/default_validator.cc index ca36249a..9967c624 100644 --- a/support/default_validator/default_validator.cc +++ b/support/default_validator/default_validator.cc @@ -216,8 +216,24 @@ int main(int argc, char **argv) { // gone very wrong if we're dealing with floats so long we need to truncate anyway :) judge_trunc = truncate(judge); team_trunc = truncate(team); - wrong_answer("Too large difference.\n Judge: %s\n User: %s\n Difference: %le\n (abs tol %le rel tol %le)", - judge_trunc.c_str(), team_trunc.c_str(), jval-tval, float_abs_tol, float_rel_tol); + if (jval == 0.0) { + wrong_answer("Too large difference.\n" + " Judge: %s\n" + " User: %s\n" + " Absolute error: %le (abs tolerance %le)\n" + " Relative error: undefined, judge value is 0 (rel tolerance %le)", + judge_trunc.c_str(), team_trunc.c_str(), + jval - tval, float_abs_tol, float_rel_tol); + } else { + wrong_answer("Too large difference.\n" + " Judge: %s\n" + " User: %s\n" + " Absolute error: %le (abs tolerance %le)\n" + " Relative error: %le (rel tolerance %le)", + judge_trunc.c_str(), team_trunc.c_str(), + jval - tval, float_abs_tol, + fabs(jval - tval) / fabs(jval), float_rel_tol); + } } } else if (case_sensitive) { if (strcmp(judge.c_str(), team.c_str()) != 0) { From 8f733ef80c69bc44b0274d7c400486088166d746 Mon Sep 17 00:00:00 2001 From: Matistjati Date: Mon, 25 May 2026 04:03:34 +0200 Subject: [PATCH 2/2] Update default validator float tests --- support/default_validator/default_validator.cc | 8 ++++---- .../test_combined_flags_wa/expected_message.txt | 6 +++--- .../test_float_abs_tol_wa/expected_message.txt | 6 +++--- .../test_float_rel_tol_wa/expected_message.txt | 6 +++--- .../test_float_tolerance_wa/expected_message.txt | 6 +++--- .../test_float_zero_judge_wa/args.txt | 1 + .../test_float_zero_judge_wa/expected_exit_code.txt | 1 + .../test_float_zero_judge_wa/expected_message.txt | 6 ++++++ .../test_float_zero_judge_wa/judge.ans | 1 + .../test_float_zero_judge_wa/user.out | 1 + 10 files changed, 26 insertions(+), 16 deletions(-) create mode 100644 tests/default_validator_tests/test_float_zero_judge_wa/args.txt create mode 100644 tests/default_validator_tests/test_float_zero_judge_wa/expected_exit_code.txt create mode 100644 tests/default_validator_tests/test_float_zero_judge_wa/expected_message.txt create mode 100644 tests/default_validator_tests/test_float_zero_judge_wa/judge.ans create mode 100644 tests/default_validator_tests/test_float_zero_judge_wa/user.out diff --git a/support/default_validator/default_validator.cc b/support/default_validator/default_validator.cc index 9967c624..9d79356f 100644 --- a/support/default_validator/default_validator.cc +++ b/support/default_validator/default_validator.cc @@ -219,19 +219,19 @@ int main(int argc, char **argv) { if (jval == 0.0) { wrong_answer("Too large difference.\n" " Judge: %s\n" - " User: %s\n" + " User: %s\n" " Absolute error: %le (abs tolerance %le)\n" " Relative error: undefined, judge value is 0 (rel tolerance %le)", judge_trunc.c_str(), team_trunc.c_str(), - jval - tval, float_abs_tol, float_rel_tol); + fabs(jval - tval), float_abs_tol, float_rel_tol); } else { wrong_answer("Too large difference.\n" " Judge: %s\n" - " User: %s\n" + " User: %s\n" " Absolute error: %le (abs tolerance %le)\n" " Relative error: %le (rel tolerance %le)", judge_trunc.c_str(), team_trunc.c_str(), - jval - tval, float_abs_tol, + fabs(jval - tval), float_abs_tol, fabs(jval - tval) / fabs(jval), float_rel_tol); } } diff --git a/tests/default_validator_tests/test_combined_flags_wa/expected_message.txt b/tests/default_validator_tests/test_combined_flags_wa/expected_message.txt index 645020d1..02702e66 100644 --- a/tests/default_validator_tests/test_combined_flags_wa/expected_message.txt +++ b/tests/default_validator_tests/test_combined_flags_wa/expected_message.txt @@ -1,6 +1,6 @@ Wrong answer on line 1 of output (corresponding to line 1 in answer file) Too large difference. Judge: 1.0 - User: 2.0 - Difference: -1.000000e+00 - (abs tol 5.000000e-01 rel tol 5.000000e-01) + User: 2.0 + Absolute error: 1.000000e+00 (abs tolerance 5.000000e-01) + Relative error: 1.000000e+00 (rel tolerance 5.000000e-01) diff --git a/tests/default_validator_tests/test_float_abs_tol_wa/expected_message.txt b/tests/default_validator_tests/test_float_abs_tol_wa/expected_message.txt index e3fb44b7..2e60e3d8 100644 --- a/tests/default_validator_tests/test_float_abs_tol_wa/expected_message.txt +++ b/tests/default_validator_tests/test_float_abs_tol_wa/expected_message.txt @@ -1,6 +1,6 @@ Wrong answer on line 1 of output (corresponding to line 1 in answer file) Too large difference. Judge: 1 - User: 1.4 - Difference: -4.000000e-01 - (abs tol 1.000000e-01 rel tol -1.000000e+00) + User: 1.4 + Absolute error: 4.000000e-01 (abs tolerance 1.000000e-01) + Relative error: 4.000000e-01 (rel tolerance -1.000000e+00) diff --git a/tests/default_validator_tests/test_float_rel_tol_wa/expected_message.txt b/tests/default_validator_tests/test_float_rel_tol_wa/expected_message.txt index 4917e259..a1be2ead 100644 --- a/tests/default_validator_tests/test_float_rel_tol_wa/expected_message.txt +++ b/tests/default_validator_tests/test_float_rel_tol_wa/expected_message.txt @@ -1,6 +1,6 @@ Wrong answer on line 1 of output (corresponding to line 1 in answer file) Too large difference. Judge: 100 - User: 105 - Difference: -5.000000e+00 - (abs tol -1.000000e+00 rel tol 1.000000e-02) + User: 105 + Absolute error: 5.000000e+00 (abs tolerance -1.000000e+00) + Relative error: 5.000000e-02 (rel tolerance 1.000000e-02) diff --git a/tests/default_validator_tests/test_float_tolerance_wa/expected_message.txt b/tests/default_validator_tests/test_float_tolerance_wa/expected_message.txt index 1393c4b0..42502831 100644 --- a/tests/default_validator_tests/test_float_tolerance_wa/expected_message.txt +++ b/tests/default_validator_tests/test_float_tolerance_wa/expected_message.txt @@ -1,6 +1,6 @@ Wrong answer on line 1 of output (corresponding to line 1 in answer file) Too large difference. Judge: 1 - User: 1.50001 - Difference: -5.000100e-01 - (abs tol 5.000000e-01 rel tol 5.000000e-01) + User: 1.50001 + Absolute error: 5.000100e-01 (abs tolerance 5.000000e-01) + Relative error: 5.000100e-01 (rel tolerance 5.000000e-01) diff --git a/tests/default_validator_tests/test_float_zero_judge_wa/args.txt b/tests/default_validator_tests/test_float_zero_judge_wa/args.txt new file mode 100644 index 00000000..f8a80c5a --- /dev/null +++ b/tests/default_validator_tests/test_float_zero_judge_wa/args.txt @@ -0,0 +1 @@ +float_relative_tolerance 0.01 diff --git a/tests/default_validator_tests/test_float_zero_judge_wa/expected_exit_code.txt b/tests/default_validator_tests/test_float_zero_judge_wa/expected_exit_code.txt new file mode 100644 index 00000000..920a1396 --- /dev/null +++ b/tests/default_validator_tests/test_float_zero_judge_wa/expected_exit_code.txt @@ -0,0 +1 @@ +43 diff --git a/tests/default_validator_tests/test_float_zero_judge_wa/expected_message.txt b/tests/default_validator_tests/test_float_zero_judge_wa/expected_message.txt new file mode 100644 index 00000000..a28a572c --- /dev/null +++ b/tests/default_validator_tests/test_float_zero_judge_wa/expected_message.txt @@ -0,0 +1,6 @@ +Wrong answer on line 1 of output (corresponding to line 1 in answer file) +Too large difference. + Judge: 0 + User: 1 + Absolute error: 1.000000e+00 (abs tolerance -1.000000e+00) + Relative error: undefined, judge value is 0 (rel tolerance 1.000000e-02) diff --git a/tests/default_validator_tests/test_float_zero_judge_wa/judge.ans b/tests/default_validator_tests/test_float_zero_judge_wa/judge.ans new file mode 100644 index 00000000..573541ac --- /dev/null +++ b/tests/default_validator_tests/test_float_zero_judge_wa/judge.ans @@ -0,0 +1 @@ +0 diff --git a/tests/default_validator_tests/test_float_zero_judge_wa/user.out b/tests/default_validator_tests/test_float_zero_judge_wa/user.out new file mode 100644 index 00000000..d00491fd --- /dev/null +++ b/tests/default_validator_tests/test_float_zero_judge_wa/user.out @@ -0,0 +1 @@ +1