Difference between revisions of "DigitsTolType"

From WeBWorK_wiki
Jump to navigation Jump to search
(first draft of page.)
(add note about relative tolerance)
 
(6 intermediate revisions by the same user not shown)
Line 49: Line 49:
 
<pre>
 
<pre>
 
Context("Numeric")
 
Context("Numeric")
Context()->flags->set(tolType=>'digits', tolerance=>3, tolTruncation=>1);
+
Context()->flags->set(tolType => 'digits', tolerance => 3, tolTruncation => 1);
 
$answer = Real("pi");
 
$answer = Real("pi");
   
Line 59: Line 59:
 
<b>Setup:</b>
 
<b>Setup:</b>
 
<ul>
 
<ul>
<li>Ensure that the <code>Numeric</code> context is set. This only pertains to numbers. </li>
 
  +
<li>The <code>tolType => 'digits'</code> switches from the default 'relative' tolerance type to the 'digits' tolerance type.</li>
<li>The <code>tolType=>'digits'</code> switch to the digits tolerance. </li>
 
  +
<li>The <code>tolerance => 3</code> sets the number of digits to check to 3. The default value is acutally the default for other tolerance types, 0.001, but any tolerance that is between 0 and 1 is converted via log10 and rounding to an integer (in this case, to 3).</li>
<li> The <code>tolerance=>3</code> sets the number of digits to 3 (the default). </li>
+
<li>The <code>tolTruncation</code> parameter is either 1 (true) or 0 (false). Its default is 1. Details are explained below.</li>
<li> The <code>tolTruncation</code> parameter is either 1 (true) or 0 (false). Details are explained below.</li>
+
<li>The <code>tolExtraDigits</code> parameter sets the number of extra digits to examine beyond the first <code>tolerance</code> digits. Its default value is 1. This is explained below.</li>
<li> The <code>tolExtraDigits</code> parameter sets the number of extra digits for checking answers. This is explained below. </li>
 
 
</ul>
 
</ul>
 
</p>
 
</p>
 
<p>
 
<p>
In short, this will set the answer checked to see if the student answer matches the correct answer to <code>tolerance</code> digits. For the example of pi, this will be 3.14. If there are extra digits, there are a few other parameters to check:
 
  +
The goal is that the student must enter at least the first <code>tolerance</code> digits correctly. The last digits that they enter might be rounded (always accepted) or truncated (only accepted if <code>tolTruncation</code> is true). For example, if the correct answer is e=2.7182818... and <code>tolerance</code> is 3, the student can answer with 2.72. Or they can answer with 2.71 if <code>tolTruncation</code> is true. But for example 2.7 and 2.73 are not accepted.
<ul><li> If <code>tolTruncation</code> is true (the default), the correct answer and student answer are both truncated to the number of digits + the extra digits (parameter <code>tolExtraDigits</code>). The result is that both 3.141 and 3.142 are accepted.
 
  +
</p>
</li>
 
<li>If <code>tolTruncation</code> is false, then only the answer that matches the number of digits + extra digits is valid. In this example, only 3.141 will be accepted. </li>
 
</ul>
 
 
<p>
 
<p>
The default value of <code>tolTruncation</code> is true.
 
  +
If the student enters additional digits, the first additional <code>tolExtraDigits</code> digits are examined in the same manner. For example, if the correct answer is pi=3.1415926... and default flag values are used, the student can answer with 3.14, 3.141, 3.142, 3.1415, and even 3.1418 since that 8 is beyond the extra digits checking. But for example 3.143 is not accepted, since the first extra digit is not right. (And if <code>tolTruncation</code> is false, 3.141 would not be accepted either.)
 
</p>
 
</p>
  +
<p>
  +
<b>Warning:</b> this tolerance type also applies to formula comparisons. For example if the answer is 2^x and a student enters e^(0.69x), this will probably not be accepted. Random test values will be used for x to make that comparison. For example if one of the test values is x=2, the correct output is 4 and the student's output would be 3.9749... and this would be declared as not a match, since the first three digits to not agree.
  +
</p>
  +
<p>
  +
<b>Warning:</b> this article is about using this tolerance type for comparison of correct answers to student answers. But if this tolerance type is activated for a context, it also applies to comparisons you might make in problem setup code. It may be important to understand that it is not symmetric. For example, under default conditions, <code>Real(4) == Real(3.995)</code> is false, while <code>Real(3.995) == Real(4)</code> is true. The left operand is viewed as the "correct" value. With <code>Real(4) == Real(3.995)</code>, that "5" violates the <code>tolExtraDigits</code> checking. But with <code>Real(3.995) == Real(4)</code>, it is as if the student entered 4.00 and has the first 3 digits correct accounting for rounding. (Note that the default tolerance type <code>relative</code> is similarly asymmetric, but the effect is more subtle. You can see it with <code>Real(4) == Real(3.996001)</code> versus <code>Real(3.996001) == Real(4)</code>.)
  +
</p>
  +
 
</td>
 
</td>
 
</tr>
 
</tr>
Line 92: Line 96:
 
<td style="background-color:#ffcccc;padding:7px;">
 
<td style="background-color:#ffcccc;padding:7px;">
 
<p>
 
<p>
<b>First Section:</b> This tests the default characteristic of this answer checker. It should accept 3.14, 3.141 and 3.142 as correct, but not 3.15.
+
<b>First Section:</b> This tests the default conditions for this tolerance type. It should accept 3.14, 3.141 and 3.142 as correct, but not 3.15.
 
</p>
 
</p>
 
</td>
 
</td>
Line 102: Line 106:
   
 
Context("Numeric");
 
Context("Numeric");
Context()->flags->set(tolType=>'digits', tolerance=>3, tolTruncation=>0);
+
Context()->flags->set(tolType => 'digits', tolerance => 3, tolTruncation => 0);
 
$answer2 = Real("pi");
 
$answer2 = Real("pi");
   
Line 109: Line 113:
 
<td style="background-color:#ffffcc;padding:7px;">
 
<td style="background-color:#ffffcc;padding:7px;">
 
<p>
 
<p>
<b>Second block explanation: </b> First, reset the context with <code>Context("Numeric")</code> and then the set flags are set except for <code>tolTruncation=>0</code>.
+
<b>Second block explanation: </b> First, reset the context with <code>Context("Numeric")</code> and then the same flags are set as before except for <code>tolTruncation => 0</code>.
 
</td>
 
</td>
   
Line 118: Line 122:
 
<pre>
 
<pre>
 
BEGIN_PGML
 
BEGIN_PGML
This section is with [|tolTruncation|] set to false (0). The exact answer is [`\pi`]. Enter 3.14, 3.15, 3.141, 3.142 to see if it accepts the answer.
+
This section is with [|tolTruncation|] set to false (0). The exact answer is [`\pi`]. Enter 3.14, 3.141, 3.142 to see if it accepts the answer.
   
 
[`\pi=`][_]{$answer2}
 
[`\pi=`][_]{$answer2}
Line 127: Line 131:
 
<td style="background-color:#ffcccc;padding:7px;">
 
<td style="background-color:#ffcccc;padding:7px;">
 
<p>
 
<p>
<b>Second Section:</b> This tests the default characteristic of this answer checker. It should accept 3.14, 3.142 as correct, but not 3.141 or 3.15.
+
<b>Second Section:</b> This tests when <code>tolTruncation</code> is false. It should accept 3.14, 3.142 as correct, but not 3.141.
 
</p>
 
</p>
 
</td>
 
</td>
Line 136: Line 140:
 
<pre>
 
<pre>
 
Context("Numeric");
 
Context("Numeric");
Context()->flags->set(tolType=>'digits', tolerance=>3, tolTruncation=>0,tolExtraDigits=>2);
+
Context()->flags->set(tolType => 'digits', tolerance => 3, tolTruncation => 0, tolExtraDigits => 2);
 
$answer3 = Real("3.14");
 
$answer3 = Real("3.14");
 
</pre>
 
</pre>
Line 142: Line 146:
 
<td style="background-color:#ffffcc;padding:7px;">
 
<td style="background-color:#ffffcc;padding:7px;">
 
<p>
 
<p>
<b>Second block explanation: </b> First, reset the context with <code>Context("Numeric")</code> and then the set flags are set except
+
<b>Second block explanation: </b> First, reset the context with <code>Context("Numeric")</code> and then the same flags are set except
for <code>tolTruncation=>0</code> as well as the <code>tolExtraDigits=>2</code>.
+
for <code>tolTruncation => 0</code> as well as the <code>tolExtraDigits => 2</code>.
 
</td>
 
</td>
   
Line 153: Line 157:
 
BEGIN_PGML
 
BEGIN_PGML
   
If we want to consider only answers to some number to digits. Enter 3.14, 3.15, 3.141, 3.142 to see if it accepts the answer.
+
This section is with [|tolTruncation|] set to false (0) and [|tolExtraDigits|] set to 2. Enter 3.1415, 3.1416, 3.1417, 3.14888, 3.14, and 3.1415888 to see if it accepts the answer.
   
Enter [`\pi`] to the first 2 decimal places after the decimal point [_]{$answer3}
 
  +
[`\pi=`][_]{$answer3}
   
 
END_PGML
 
END_PGML
Line 163: Line 167:
 
<td style="background-color:#ffcccc;padding:7px;">
 
<td style="background-color:#ffcccc;padding:7px;">
 
<p>
 
<p>
<b>Third Section:</b> This allows only to the given number of digits (3). It should accept only 3.14 as correct.
 
  +
<b>Third Section:</b> This additionally tests when <code>tolExtraDigits</code> is larger than its default. It should accept 3.1416, 3.14, and 3.1415888. It should reject 3.1415 because <code>tolTruncation</code> is false. It should reject 3.1417 and 3.14888 because the student chose to use extra digits and the first two of those are not correct.
 
</p>
 
</p>
 
</td>
 
</td>

Latest revision as of 15:05, 30 April 2021

Construction.png This article is under construction. Use the information herein with caution until this message is removed.

Digits TolType


This describes an alternative way for determining the tolerance type based on the number of digits.

Problem Techniques Index

PG problem file Explanation
DOCUMENT();
loadMacros(
  "PGstandard.pl",
  "MathObjects.pl",
  "PGML.pl"
);
TEXT(beginproblem());

Initialization: The tolType of type digits is built-in to MathObjects.

Context("Numeric")
Context()->flags->set(tolType => 'digits', tolerance => 3, tolTruncation => 1);
$answer = Real("pi");

Setup:

  • The tolType => 'digits' switches from the default 'relative' tolerance type to the 'digits' tolerance type.
  • The tolerance => 3 sets the number of digits to check to 3. The default value is acutally the default for other tolerance types, 0.001, but any tolerance that is between 0 and 1 is converted via log10 and rounding to an integer (in this case, to 3).
  • The tolTruncation parameter is either 1 (true) or 0 (false). Its default is 1. Details are explained below.
  • The tolExtraDigits parameter sets the number of extra digits to examine beyond the first tolerance digits. Its default value is 1. This is explained below.

The goal is that the student must enter at least the first tolerance digits correctly. The last digits that they enter might be rounded (always accepted) or truncated (only accepted if tolTruncation is true). For example, if the correct answer is e=2.7182818... and tolerance is 3, the student can answer with 2.72. Or they can answer with 2.71 if tolTruncation is true. But for example 2.7 and 2.73 are not accepted.

If the student enters additional digits, the first additional tolExtraDigits digits are examined in the same manner. For example, if the correct answer is pi=3.1415926... and default flag values are used, the student can answer with 3.14, 3.141, 3.142, 3.1415, and even 3.1418 since that 8 is beyond the extra digits checking. But for example 3.143 is not accepted, since the first extra digit is not right. (And if tolTruncation is false, 3.141 would not be accepted either.)

Warning: this tolerance type also applies to formula comparisons. For example if the answer is 2^x and a student enters e^(0.69x), this will probably not be accepted. Random test values will be used for x to make that comparison. For example if one of the test values is x=2, the correct output is 4 and the student's output would be 3.9749... and this would be declared as not a match, since the first three digits to not agree.

Warning: this article is about using this tolerance type for comparison of correct answers to student answers. But if this tolerance type is activated for a context, it also applies to comparisons you might make in problem setup code. It may be important to understand that it is not symmetric. For example, under default conditions, Real(4) == Real(3.995) is false, while Real(3.995) == Real(4) is true. The left operand is viewed as the "correct" value. With Real(4) == Real(3.995), that "5" violates the tolExtraDigits checking. But with Real(3.995) == Real(4), it is as if the student entered 4.00 and has the first 3 digits correct accounting for rounding. (Note that the default tolerance type relative is similarly asymmetric, but the effect is more subtle. You can see it with Real(4) == Real(3.996001) versus Real(3.996001) == Real(4).)

BEGIN_PGML

This section is with [|tolTruncation|] set to true (1).  The exact answer is [`\pi`].   Enter 3.14, 3.15, 3.141, 3.142 to see if it accepts the answer.  

[`\pi=`][_]{$answer}

END_PGML

First Section: This tests the default conditions for this tolerance type. It should accept 3.14, 3.141 and 3.142 as correct, but not 3.15.


Context("Numeric");
Context()->flags->set(tolType => 'digits', tolerance => 3, tolTruncation => 0);
$answer2 = Real("pi");

Second block explanation: First, reset the context with Context("Numeric") and then the same flags are set as before except for tolTruncation => 0.

BEGIN_PGML
This section is with [|tolTruncation|] set to false (0).  The exact answer is [`\pi`].   Enter 3.14, 3.141, 3.142 to see if it accepts the answer. 

[`\pi=`][_]{$answer2}

END_PGML

Second Section: This tests when tolTruncation is false. It should accept 3.14, 3.142 as correct, but not 3.141.

Context("Numeric");
Context()->flags->set(tolType => 'digits', tolerance => 3, tolTruncation => 0, tolExtraDigits => 2);
$answer3 = Real("3.14");

Second block explanation: First, reset the context with Context("Numeric") and then the same flags are set except for tolTruncation => 0 as well as the tolExtraDigits => 2.

BEGIN_PGML

This section is with [|tolTruncation|] set to false (0) and [|tolExtraDigits|] set to 2. Enter 3.1415, 3.1416, 3.1417, 3.14888, 3.14, and 3.1415888 to see if it accepts the answer. 

[`\pi=`][_]{$answer3}

END_PGML

Third Section: This additionally tests when tolExtraDigits is larger than its default. It should accept 3.1416, 3.14, and 3.1415888. It should reject 3.1415 because tolTruncation is false. It should reject 3.1417 and 3.14888 because the student chose to use extra digits and the first two of those are not correct.

Problem Techniques Index