From: pichetp Date: Fri, 2 Mar 2007 20:45:12 +0000 (+0000) Subject: grading correctly small numbers MDL-8478 merge from 18_STABLE X-Git-Url: http://git.mjollnir.org/gw?a=commitdiff_plain;h=dcd4192a99b910c1e697cbf9b8b692226617e6c1;p=moodle.git grading correctly small numbers MDL-8478 merge from 18_STABLE --- diff --git a/question/type/numerical/questiontype.php b/question/type/numerical/questiontype.php index 58ebac7fce..dd7864c05f 100644 --- a/question/type/numerical/questiontype.php +++ b/question/type/numerical/questiontype.php @@ -351,13 +351,24 @@ 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; - case '3': case 'geometric': + case '3': case 'geometric': $quotient = 1 + abs($tolerance); $max = $answer->answer * $quotient; $min = $answer->answer / $quotient;