I'm trying to author a problem which asks a student to enter the answer in a random number of significant digits. However, it seems WeBWorK allows some wrong answers. For example, if the correct answer is 12.34, WeBWorK accepts 12.33 and 12.35 as correct. Is there a quick way to fix this?

Thank you!

Carl Yao

DOCUMENT();

############################################################

# Load Macros

############################################################

loadMacros(

"PGstandard.pl",

"MathObjects.pl",

"PGML.pl",

"PGcourse.pl",

);

############################################################

# Header

############################################################

#COMMENT('');

TEXT(beginproblem());

############################################################

# PG Setup

############################################################

Context("Numeric");

do {

$num1 = random(10,100,0.01);

$num2 = random(10,100,0.01);

$num3 = random(10,100,0.01);

$num4 = random(10,100,0.01);

$N = ($num1-$num2)/($num3-$num4);

} until ( $N>0 );

$b = $N;

$c = floor($b);

## Counting the no. of digits

## to the left of decimal point

## in the given no.

for ($i = 0; $b >= 1; ++$i){

$b = $b / 10;}

$n = ($i-2)>1 ? random($i-2,$i+3,1) : random(1,$i+3,1);

$d = $n - $i;

$b = $N;

$b = $b*10**$d;

$e = $b + 0.5;

if ($e == ceil($b)) {

$f = (ceil($b));

$h = $f - 2;

if ($h % 2 != 0) {

$e = $e - 1;

}

}

$j = floor($e);

$m = 10**$d;

$ans = $j / $m;

############################################################

# Body

############################################################

BEGIN_PGML

Calculate [`\frac{[$num1]-[$num2]}{[$num3]-[$num4]}`]

Give your answer correct to [`[$n]`] significant figures.

The answer is [______________]{$ans}.

END_PGML

############################################################

# Solution

############################################################

#BEGIN_PGML_SOLUTION

#END_PGML_SOLUTION

############################################################

# End Problem

############################################################

ENDDOCUMENT();