WeBWorK Problems

Problem with Fractions in Answer

Problem with Fractions in Answer

by Daniele Arcara -
Number of replies: 2
I assigned a trigonometric integral with a random variable, and I was having problems when the answer involved a fraction with infinite digits (in the particular case, 1/6). The integral was the integral of sin^a(x)*cos(x), with an answer of 1/(a+1)*(sin(x))^(a+1). When a is 5, the system seems to round the 1/6 in my answer, and then not recognize a student answer as correct when they put the 1/6 in it. I wonder if the 'upToConstant' has something to do with it...

Here is my code:

DOCUMENT();

loadMacros(
"PGstandard.pl",
"PGML.pl",
"PGcourse.pl"
);

TEXT(beginproblem());

$a = random(3,7,2);
$f = Formula("(sin x)**($a)*(cos x)");
$F = Formula("1/($a+1)*(sin x)**($a+1)");

$ans = $F;

BEGIN_PGML

[`` \int (\sin x)^[$a] \cos x \, dx = ``] [_______________________]{$ans->cmp(upToConstant=>1)} [` +C `]

END_PGML

ENDDOCUMENT;


To temporarily fix the issue, I added the following lines of code after my definition of $a:

if ($a == 5)
   { $a = 7; }
if ($a == 6)
   { $a = 7; }

Thank you for the help.
In reply to Daniele Arcara

Re: Problem with Fractions in Answer

by Danny Glin -
This works for me on WeBWorK 2.11.  See the attached screenshot.

Does this happen every time, or just sometimes?  My one guess is that for a particular seed the x values chosen lead to very small values of sin^6x, which makes the rounded version fall outside the tolerance for the question.

Danny
Attachment Screen_Shot_2016-01-27_at_1.00.35_PM.png
In reply to Daniele Arcara

Re: Problem with Fractions in Answer

by Alex Jordan -
This is not about your answer checking issue, but if you would like the correct answer to *display* with things like 1/6 instead of 0.1666... then one option is you can replace:

$F = Formula("1/($a+1)*(sin x)**($a+1)");

with

Context()->flags->set(reduceConstants=>0);
$a1 = $a + 1;
$F = Formula("1/$a1*(sin x)**($a1)");

or just replace that one line with:

$F = Formula("(sin x)**($a+1)/($a+1)");

if you are OK with putting the denominator there.