Subject: [LON-CAPA-dev] Re: [LON-CAPA-users] exponent in formula response

From: Peter Riegler <[email-masked]>
Date: Mon, 01 Feb 2010 07:59:04 +0100

Hi,

one can find the reason for this in &implicit_multiplication in 
response.pm. There the multiplication operator in front auf a power of 
10 is given very high binding power. Hence, the division in 1/2*10^4 
binds less than the multiplication. Hoever, in 1/2*19^4 division binds 
stronger than multiplication.

I am posting this to dev as well as we might want to change this. To 
this end we would need to clarify why and if at all we need the 
currently implemented special behavior of the multiplication operator.

Peter

Todd Ruskell wrote:
> James,
> 
> Not sure of a work-around, but I suspect I know *why* this is happening:
> 
> The expression 400/3*10^3 is ambiguous.   It appears your instructor
> would like it to obey the apparent order of operations and evaluate to
> 400/3*1000.  However, I believe the parser is interpreting this as
> 400/(3*1000), or 400/3e3, which clearly puts the factor of 1000 in the
> denominator.  That is, the parser is too smart for its own good, and
> is treating 3*10^3 as a single number written in exponential notation.
>  One could argue over whether or not this is a "good thing"  but
> changing the behavior of the parser at this time would undoubtedly
> break many other "working" problems.   So the only fix I really see is
> to make sure the students understand that although order of operations
> is obeyed, a quantity like 6*10^3 is processed as a single
> mathematical entity.
> 
> Todd
> --
> Todd Ruskell, Ph.D.                   Phone: 303-384-2080
> Senior Lecturer in Physics          Fax:  303-273-3919
> Colorado School of Mines
> Golden, CO 80401
> 
> 
> 
> On Fri, Jan 29, 2010 at 11:35 AM, James Mueller <[email-masked]> wrote:
>> A faculty member has a math problem that uses formula response with samples
>> so that students can enter their final expression without having to plug it
>> into a calculator.
>>
>> /res/athanas/c2-volume-1.problem
>>
>> an acceptable answer  (depending on the randomization) might be
>> 3.14159*(400/3*19^3-80/4*19^4+4/5*19^5
>>
>> She has noticed an issue when the end-point of the integration is 10. A
>> submission such as
>> 3.14159*(400/3*10^3-80/4*10^4+4/5*10^5)
>> is evaluated as incorrect, whereas if the student explicitly adds
>> parenthesis,
>> 3.14159*(400/3*(10^3)-80/4*(10^4)+4/5*(10^5))
>> everything works as expected.
>>
>> So for 10, and only 10, there seems to be a problem.
>>
>> Any ideas as to How she might fix this problem?
>> (other than the one I came up with,which is choose random numbers such that
>> 10 is never the endpoint of the integration in x)
>>
>>
>> <problem>
>>    <script type="loncapa/perl">
>> $n=1.123; while ($n !=&roundto($n,1) ){
>> $a=&random(1,5,1); $b=&random(1,20,1); $n=$b/$a;}
>> for ($x = 0; $x<=$n; $x+= 0.001) {
>>     push @X1, $x;
>>     push @Y1, $b*$x-$a*$x**2;   }
>> $p=($a**2)/5*($n**5)-$a*$b/2*($n**4)+($b**2)/3*($n**3);
>> $pi=3.14159;
>> $volume1="$pi*$p";
>> $example=3.14159*(7**3/3+(7/2)**2-14*exp(2));
>>  </script>
>>  <startouttext />
>> <br />
>> Determine the volume of the solid formed by rotating about the
>> <m>$x$</m>-axis, the region above the <m>$x$</m>-axis and below the curve <m
>> eval="on">$\;\;  y = $b x - $a x^2\,$</m>. <p />
>> <endouttext />
>> <gnuplot width="400" grid="on" align="center" font="medium" height="300"
>> border="on" bgcolor="xffffff" fgcolor="x000000" alttag="dynamically
>> generated plot" transparent="off">
>>     <xlabel>x</xlabel>
>>     <curve linestyle="lines" name="" color="x8B0000" pointtype="1"
>> pointsize="1">
>>         <data>@X1</data>
>>         <data>@Y1</data>
>>     </curve>
>>  </gnuplot>
>> <p />
>> <startouttext />Volume of the solid is
>> <formularesponse answer="$volume1" samples="x@1:4#2" id="11">
>> <responseparam name="tol" default="0.001" description="Numerical Tolerance"
>> type="tolerance" />
>>        <textline size="55" readonly="no" />
>>    </formularesponse>
>>  <m> units $^3$.</m>
>> <br />Use <m>$\pi=3.14159$</m> and round your answer to 3 decimal places.
>> <br />
>> You do not need to do calculations. For example <m eval="on">$example </m>
>> can be given as  3.14159(7^3/3+(7/2)^2-14exp(2)). <endouttext />
>> </problem>
>>
>> _______________________________________________
>> LON-CAPA-users mailing list
>> [email-masked]
>> http://mail.lon-capa.org/mailman/listinfo/lon-capa-users
>>
> 
> _______________________________________________
> LON-CAPA-users mailing list
> [email-masked]
> http://mail.lon-capa.org/mailman/listinfo/lon-capa-users

-- 
Peter Riegler
Fakultät Informatik
Ostfalia Hochschule für angewandte Wissenschaften
Fachhochschule Braunschweig/Wolfenbüttel
Salzdahlumer Str. 46/48
38302 Wolfenbüttel
Fon: ++49 5331 939 31540
http://public.rz.fh-wolfenbuettel.de/~riegler

---

From: Peter Riegler <[email-masked]>
Date: Wed, 03 Feb 2010 10:26:30 +0100

Hi,

Peter

---

From: Gerd Kortemeyer <[email-masked]>
Date: Wed, 3 Feb 2010 07:52:48 -0500

Hi,

Yes, it was decided some time really early in the good old CAPA days that

2*10^4
2e4
2x10^4
2*10**4
2x10**4
2E4

are all ways to write the single number "2e4" - that's why is it currently so binding. While I don't really agree with having so many ways to write the same thing and the special coding it entails, I am worried that changing this now might cause damage in published problems.

While I have not tried it, I suspect that 1/2*10.0^4 would behave differently, since it does not exactly match any of the patterns above.

... legacy ....

- Gerd.

On Feb 3, 2010, at 4:26 AM, Peter Riegler wrote:

> LON-CAPA-dev mailing list
> [email-masked]
> http://mail.lon-capa.org/mailman/listinfo/lon-capa-dev

---

From: Peter Riegler <[email-masked]>
Date: Wed, 03 Feb 2010 16:48:53 +0100

Hi,

> While I have not tried it, I suspect that 1/2*10.0^4 would behave differently, since it does not exactly match any of the patterns above.

I have tried this. The behavior is as suspected.

The very reason for the "malfunction" under discussion is the line
# 3x10^8 -> 3&8; 3*10^-8 -> 3&-8
$expression=~s/(\d+)(?:x|\*)10(?:\^|\*\*)([\+\-]*\d+)/$1\&\($2\)/gsi;
It translates e.g. 1/2*10^2 into 1/2&2 which will eventually become 
1/2e2. In other words 500 becomes 1/200.
Maybe we can fix this with something like
$expression=~s/(\d+/\d+)(?:x|\*)10(?:\^|\*\*)([\+\-]*\d+)/$1*1\&\($2\)/gsi;
$expression=~s/(\d+)(?:x|\*)10(?:\^|\*\*)([\+\-]*\d+)/$1\&\($2\)/gsi;
or even
$expression=~s/(\d+)(?:x|\*)10(?:\^|\*\*)([\+\-]*\d+)/$1*1\&\($2\)/gsi;

In general I feel uneasy about what we are doing for implicit 
multiplication. In the parlance of theoretical computer science: Are we 
really dealing with a type-3 language here or is it a type-2 language? 
If the latter is true we can't fully solve the issue with finite 
automata/regexes but have to use a parser/stack machine.

Maybe someone can help to think all this through.

Peter

---

From: Peter Riegler <[email-masked]>
Date: Tue, 02 Feb 2010 20:25:12 +0100

Hi,

Peter