diff --git a/question/type/numerical/questiontype.php b/question/type/numerical/questiontype.php index 435fdaaa4f8..d3b80ff83a2 100644 --- a/question/type/numerical/questiontype.php +++ b/question/type/numerical/questiontype.php @@ -356,9 +356,20 @@ class question_numerical_qtype extends question_shortanswer_qtype { /// Recalculate the tolerance and fall through /// to the nominal case: $tolerance = $answer->answer * $tolerance; - // Falls through to the nominal case - + // Do not fall through to the nominal case because the tiny fraction is a factor of the answer + $tolerance = abs($tolerance); // important - otherwise min and max are swapped + $max = $answer->answer + $tolerance; + $min = $answer->answer - $tolerance; + break; case '2': case 'nominal': $tolerance = abs($tolerance); // important - otherwise min and max are swapped + // $answer->tolerance 0 or something else + if ((float)$answer->tolerance == 0.0 && abs((float)$answer->answer) <= $tolerance ){ + $tolerance = (float) ("1.0e-".ini_get('precision')) * abs((float)$answer->answer) ; //tiny fraction + } else if ((float)$answer->tolerance != 0.0 && abs((float)$answer->tolerance) < abs((float)$answer->answer) && abs((float)$answer->answer) <= $tolerance){ + $tolerance = (1+("1.0e-".ini_get('precision')) )* abs((float) $answer->tolerance) ;//tiny fraction + } + $max = $answer->answer + $tolerance; $min = $answer->answer - $tolerance; break;