DigitsTolType: Difference between revisions
(first draft of page.) |
(added historical tag and gave updated problem link) |
||
(9 intermediate revisions by 3 users not shown) | |||
Line 1: | Line 1: | ||
{{ | {{historical}} | ||
<p style="font-size: 120%;font-weight:bold">This problem has been replaced with [https://openwebwork.github.io/pg-docs/sample-problems/problem-techniques/DigitsTolType.html a newer version of this problem]</p> | |||
<h2>Digits TolType</h2> | <h2>Digits TolType</h2> | ||
Line 48: | Line 49: | ||
<td style="background-color:#ffffdd;border:black 1px dashed;"> | <td style="background-color:#ffffdd;border:black 1px dashed;"> | ||
<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 60: | ||
<b>Setup:</b> | <b>Setup:</b> | ||
<ul> | <ul> | ||
<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> | <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 | <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 | |||
</ul> | </ul> | ||
</p> | </p> | ||
<p> | <p> | ||
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. | |||
< | </p> | ||
</ | <p> | ||
< | 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> | |||
<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> | <p> | ||
The default | <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> | </p> | ||
</td> | </td> | ||
</tr> | </tr> | ||
Line 93: | Line 97: | ||
<td style="background-color:#ffcccc;padding:7px;"> | <td style="background-color:#ffcccc;padding:7px;"> | ||
<p> | <p> | ||
<b>First Section:</b> This tests the default | <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 103: | Line 107: | ||
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 110: | Line 114: | ||
<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 | <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 119: | Line 123: | ||
<pre> | <pre> | ||
BEGIN_PGML | BEGIN_PGML | ||
This section is with [|tolTruncation|] set to false (0). The exact answer is [`\pi`]. Enter 3.14 | 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 128: | Line 132: | ||
<td style="background-color:#ffcccc;padding:7px;"> | <td style="background-color:#ffcccc;padding:7px;"> | ||
<p> | <p> | ||
<b>Second Section:</b> This tests | <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 137: | Line 141: | ||
<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 143: | Line 147: | ||
<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 | <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 154: | Line 158: | ||
BEGIN_PGML | 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 | END_PGML | ||
Line 164: | Line 168: | ||
<td style="background-color:#ffcccc;padding:7px;"> | <td style="background-color:#ffcccc;padding:7px;"> | ||
<p> | <p> | ||
<b>Third Section:</b> This | <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 13:21, 28 June 2023
This problem has been replaced with a newer version of this problem
Digits TolType
This describes an alternative way for determining the tolerance type based on the number of digits.
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 goal is that the student must enter at least the first
If the student enters additional digits, the first additional 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, |
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 |
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 |
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 |
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 |