Difference between revisions of "DigitsTolType"
(first draft of page.) |
(added historical tag and gave updated problem link) |
||
(9 intermediate revisions by 3 users not shown) | |||
Line 1: | Line 1: | ||
− | {{UnderConstruction}} |
||
+ | {{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>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> |
+ | <li>The <code>tolTruncation</code> parameter is either 1 (true) or 0 (false). Its default is 1. Details are explained below.</li> |
− | <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 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 102: | 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 109: | 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 118: | 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 127: | 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 136: | 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 142: | 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 153: | 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. |
|
− | Enter [`\pi`] to the first 2 decimal places after the decimal point [_]{$answer3} |
||
+ | [`\pi=`][_]{$answer3} |
||
END_PGML |
END_PGML |
||
Line 163: | Line 168: | ||
<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 09: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 |