We show how to use format decimals, and, conveniently also how to use logarithmic functions in PG problems.
Download file: FormattingDecimals.pg
DOCUMENT(); loadMacros('PGstandard.pl', 'PGML.pl', 'PGcourse.pl');
Preamble
These standard macros need to be loaded.Context("Numeric"); Context()->variables->set(x => { limits => [ 2, 4 ] }); $a = random(3, 7, 1); # both ln and log are natural log (base e) $b = sprintf("%0.3f", ln($a)); $ans1 = Real("$b"); $f = Formula("ln(x)"); # or log(x) $ans2 = $f->eval(x => $a); # log base 10 is log10, logten, # ln(x)/ln(10), or log(x)/log(10) $c = sprintf("%0.3f", ln($a) / ln(10)); # or log($a)/log(10) $ans3 = Real("$c"); $g = Formula("ln(x)/ln(10)"); # or log(x)/log(10) $ans4 = $g->eval(x => $a);
Setup
Since the domain of a logarithmic function is all positive real numbers, we should set the domain of function evaluation to [2,4]
in order to avoid vertical asymptotes and places where a logarithmic function takes values close to zero.
Use perl’s sprintf( format, number );
command to format the decimal. The "%0.3f"
portion truncates after 3 decimal places and uses zeros (not spaces) to right-justify. For answers involving money, you should set "%0.2f"
for two decimal places and zero filling (for example, sprintf("%0.2f",0.5);
returns 0.50
). You can do a web search for more options to perl’s sprintf, and also for WeBWorK’s contextCurrency.pl. If you do further calculations with $b
, be aware that numerical error may be an issue since you’ve reduced the number of decimal places.
We used the logarithm change of base formula log10(a) = log(a) / log(10) = ln(a) / ln(10)
to get a logarithm base 10.
It is possible to set a context flag that will use the base 10 log via Context()->flags->set(useBaseTenLog=>1);
The default is that this is set to zero.
If you would like to define log base 2 (or another base) see Adding Functions to a Context for how to define and add a new function to the context so that students can enter it in their answers.
BEGIN_PGML Notice the formatting and rounding differences between [` [$ans1] `] and [` [$ans2] `]. Try entering [` \ln([$a]), \log([$a]), \ln([$a])/\ln(10), \log([$a])/\log(10), \mathrm{logten}([$a]), \mathrm{log10}([$a]) `]. 1. [` \ln([$a]) = `] [_____]{$ans1} 2. [` \ln([$a]) = `] [_____]{$ans2} 3. [` \log_{10}([$a]) = `] [_____]{$ans3} 4. [` \log_{10}([$a]) = `] [_____]{$ans4} END_PGML
Statement
Notice the difference in decimal formatting when “Show Correct Answers” is checked and you click “Submit Answers”.
BEGIN_PGML_SOLUTION Solution explanation goes here. END_PGML_SOLUTION ENDDOCUMENT();
Solution
A solution should be provided here.