| … | |
… | |
| 152 | $functZeroLevelTolDefault,$functAbsTolDefault,$functNumOfPoints,$functVarDefault, |
152 | $functZeroLevelTolDefault,$functAbsTolDefault,$functNumOfPoints,$functVarDefault, |
| 153 | $functLLimitDefault, $functULimitDefault, $functMaxConstantOfIntegration, |
153 | $functLLimitDefault, $functULimitDefault, $functMaxConstantOfIntegration, |
| 154 | ); |
154 | ); |
| 155 | |
155 | |
| 156 | sub _PGanswermacros_init { |
156 | sub _PGanswermacros_init { |
| 157 | PG_restricted_eval(q{ |
157 | |
| 158 | $BR = $main::BR; # convenient localizations. |
158 | $BR = $main::BR; # convenient localizations. |
| 159 | $PAR = $main::PAR; |
159 | $PAR = $main::PAR; |
| 160 | |
160 | |
| 161 | # import defaults |
161 | # import defaults |
| 162 | # these are now imported from the %envir variable |
162 | # these are now imported from the %envir variable |
| 163 | $numRelPercentTolDefault = $main::numRelPercentTolDefault; |
163 | $numRelPercentTolDefault = PG_restricted_eval(q{$main::numRelPercentTolDefault}); |
| 164 | $numZeroLevelDefault = $main::numZeroLevelDefault; |
164 | $numZeroLevelDefault = PG_restricted_eval(q{$main::numZeroLevelDefault}); |
| 165 | $numZeroLevelTolDefault = $main::numZeroLevelTolDefault; |
165 | $numZeroLevelTolDefault = PG_restricted_eval(q{$main::numZeroLevelTolDefault}); |
| 166 | $numAbsTolDefault = $main::numAbsTolDefault; |
166 | $numAbsTolDefault = PG_restricted_eval(q{$main::numAbsTolDefault}); |
| 167 | $numFormatDefault = $main::numFormatDefault; |
167 | $numFormatDefault = PG_restricted_eval(q{$main::numFormatDefault}); |
| 168 | |
168 | |
| 169 | $functRelPercentTolDefault = $main::functRelPercentTolDefault; |
169 | $functRelPercentTolDefault = PG_restricted_eval(q{$main::functRelPercentTolDefault}); |
| 170 | $functZeroLevelDefault = $main::functZeroLevelDefault; |
170 | $functZeroLevelDefault = PG_restricted_eval(q{$main::functZeroLevelDefault}); |
| 171 | $functZeroLevelTolDefault = $main::functZeroLevelTolDefault; |
171 | $functZeroLevelTolDefault = PG_restricted_eval(q{$main::functZeroLevelTolDefault}); |
| 172 | $functAbsTolDefault = $main::functAbsTolDefault; |
172 | $functAbsTolDefault = PG_restricted_eval(q{$main::functAbsTolDefault}); |
| 173 | $functNumOfPoints = $main::functNumOfPoints; |
173 | $functNumOfPoints = PG_restricted_eval(q{$main::functNumOfPoints}); |
| 174 | $functVarDefault = $main::functVarDefault; |
174 | $functVarDefault = PG_restricted_eval(q{$main::functVarDefault}); |
| 175 | $functLLimitDefault = $main::functLLimitDefault; |
175 | $functLLimitDefault = PG_restricted_eval(q{$main::functLLimitDefault}); |
| 176 | $functULimitDefault = $main::functULimitDefault; |
176 | $functULimitDefault = PG_restricted_eval(q{$main::functULimitDefault}); |
| 177 | $functMaxConstantOfIntegration = $main::functMaxConstantOfIntegration; |
177 | $functMaxConstantOfIntegration = PG_restricted_eval(q{$main::functMaxConstantOfIntegration}); |
| 178 | |
178 | |
| 179 | } |
179 | |
| 180 | ); |
180 | |
| 181 | } |
181 | } |
| 182 | |
182 | |
| 183 | ########################################################################## |
183 | ########################################################################## |
| 184 | ########################################################################## |
184 | ########################################################################## |
| 185 | ## Number answer evaluators |
185 | ## Number answer evaluators |
| … | |
… | |
| 388 | ); |
388 | ); |
| 389 | |
389 | |
| 390 | set_default_options( \%options, |
390 | set_default_options( \%options, |
| 391 | 'tolType' => 'relative', |
391 | 'tolType' => 'relative', |
| 392 | 'tolerance' => $numRelPercentTolDefault, |
392 | 'tolerance' => $numRelPercentTolDefault, |
| 393 | 'mode' => 'std', |
393 | 'mode' => 'std', |
| 394 | 'format' => $numFormatDefault, |
394 | 'format' => $numFormatDefault, |
| 395 | 'relTol' => $numRelPercentTolDefault, |
395 | 'relTol' => $numRelPercentTolDefault, |
| 396 | 'zeroLevel' => $numZeroLevelDefault, |
396 | 'zeroLevel' => $numZeroLevelDefault, |
| 397 | 'zeroLevelTol' => $numZeroLevelTolDefault, |
397 | 'zeroLevelTol' => $numZeroLevelTolDefault, |
| 398 | 'debug' => 0, |
398 | 'debug' => 0, |
| 399 | ); |
399 | ); |
| 400 | |
400 | |
| 401 | num_cmp([$correctAnswer], %options); |
401 | num_cmp([$correctAnswer], %options); |
| 402 | } |
402 | } |
| 403 | |
403 | |
| 404 | ## Similar to std_num_cmp but accepts a list of numbers in the form |
404 | ## Similar to std_num_cmp but accepts a list of numbers in the form |
| 405 | ## std_num_cmp_list(relpercentTol,format,ans1,ans2,ans3,...) |
405 | ## std_num_cmp_list(relpercentTol,format,ans1,ans2,ans3,...) |
| … | |
… | |
| 1202 | |
1202 | |
| 1203 | ######################################################################### |
1203 | ######################################################################### |
| 1204 | # Retain this first check for backword compatibility. Allows input of the form |
1204 | # Retain this first check for backword compatibility. Allows input of the form |
| 1205 | # num_cmp($ans, 1, '%0.5f') but warns against it |
1205 | # num_cmp($ans, 1, '%0.5f') but warns against it |
| 1206 | ######################################################################### |
1206 | ######################################################################### |
| 1207 | |
1207 | |
| 1208 | my %known_options = ( 'mode' => 'std', |
1208 | my %known_options = ( 'mode' => 'std', |
| 1209 | 'format' => $numFormatDefault, |
1209 | 'format' => $numFormatDefault, |
| 1210 | 'tol' => $numAbsTolDefault, |
1210 | 'tol' => $numAbsTolDefault, |
| 1211 | 'relTol' => $numRelPercentTolDefault, |
1211 | 'relTol' => $numRelPercentTolDefault, |
| 1212 | 'units' => undef, |
1212 | 'units' => undef, |
| … | |
… | |
| 1238 | 'zeroLevel' => $zeroLevel, |
1238 | 'zeroLevel' => $zeroLevel, |
| 1239 | 'zeroLevelTol' => $zeroLevelTol, |
1239 | 'zeroLevelTol' => $zeroLevelTol, |
| 1240 | 'mode' => 'std' |
1240 | 'mode' => 'std' |
| 1241 | ); |
1241 | ); |
| 1242 | } |
1242 | } |
| 1243 | else { |
1243 | # else { |
| 1244 | # handle options |
1244 | # # handle options |
| 1245 | |
1245 | # |
| 1246 | |
1246 | # |
| 1247 | @opt = ( 'relTol' => $relPercentTol, |
1247 | # @opt = ( 'relTol' => $relPercentTol, |
| 1248 | 'format' => $format, |
1248 | # 'format' => $format, |
| 1249 | 'zeroLevel' => $numZeroLevelDefault, |
1249 | # 'zeroLevel' => $numZeroLevelDefault, |
| 1250 | 'zeroLevelTol' => $numZeroLevelTolDefault, |
1250 | # 'zeroLevelTol' => $numZeroLevelTolDefault, |
| 1251 | 'mode' => 'std' |
1251 | # 'mode' => 'std' |
| 1252 | ); |
1252 | # ); |
| 1253 | } |
1253 | # } |
| 1254 | ######################################################################### |
1254 | ######################################################################### |
| 1255 | # Now handle the options assuming they are entered in the form |
1255 | # Now handle the options assuming they are entered in the form |
| 1256 | # num_cmp($ans, relTol=>1, format=>'%0.5f') |
1256 | # num_cmp($ans, relTol=>1, format=>'%0.5f') |
| 1257 | ######################################################################### |
1257 | ######################################################################### |
| 1258 | %out_options = @opt; |
1258 | %out_options = @opt; |
| … | |
… | |
| 1262 | ); |
1262 | ); |
| 1263 | |
1263 | |
| 1264 | |
1264 | |
| 1265 | |
1265 | |
| 1266 | |
1266 | |
| 1267 | |
|
|
| 1268 | set_default_options( \%out_options, |
1267 | set_default_options( \%out_options, |
| 1269 | 'tolType' => (defined($out_options{tol}) ) ? 'absolute' : 'relative', |
1268 | 'tolType' => (defined($out_options{tol}) ) ? 'absolute' : 'relative', |
| 1270 | 'tolerance' => (defined($out_options{tol}) ) ? $numAbsTolDefault : $numRelPercentTolDefault, |
1269 | 'tolerance' => (defined($out_options{tol}) ) ? $numAbsTolDefault : $numRelPercentTolDefault, |
| 1271 | 'mode' => 'std', |
1270 | 'mode' => 'std', |
| 1272 | 'format' => $numFormatDefault, |
1271 | 'format' => $numFormatDefault, |
| 1273 | 'tol' => $numAbsTolDefault, |
1272 | 'tol' => $numAbsTolDefault, |
| 1274 | 'relTol' => $numRelPercentTolDefault, |
1273 | 'relTol' => $numRelPercentTolDefault, |
| 1275 | 'units' => undef, |
1274 | 'units' => undef, |
| 1276 | 'strings' => undef, |
1275 | 'strings' => undef, |
| 1277 | 'zeroLevel' => $numZeroLevelDefault, |
1276 | 'zeroLevel' => $numZeroLevelDefault, |
| 1278 | 'zeroLevelTol' => $numZeroLevelTolDefault, |
1277 | 'zeroLevelTol' => $numZeroLevelTolDefault, |
| 1279 | 'debug' => 0, |
1278 | 'debug' => 0, |
| 1280 | |
1279 | |
| 1281 | ); |
1280 | ); |
| 1282 | |
|
|
| 1283 | |
1281 | |
| 1284 | |
1282 | |
| 1285 | |
1283 | |
| 1286 | |
1284 | |
| 1287 | |
1285 | |
| … | |
… | |
| 1307 | # $tol = $out_options{'relTol'}; |
1305 | # $tol = $out_options{'relTol'}; |
| 1308 | # $out_options{'tolType'} = $out_options{'relative'}; |
1306 | # $out_options{'tolType'} = $out_options{'relative'}; |
| 1309 | $out_options{'tolerance'}=$out_options{'relTol'}; |
1307 | $out_options{'tolerance'}=$out_options{'relTol'}; |
| 1310 | # delete($out_options{'tol'}) if exists( $out_options{'tol'} ); |
1308 | # delete($out_options{'tol'}) if exists( $out_options{'tol'} ); |
| 1311 | } |
1309 | } |
| 1312 | |
|
|
| 1313 | |
1310 | |
| 1314 | # thread over lists |
1311 | # thread over lists |
| 1315 | my @ans_list = (); |
1312 | my @ans_list = (); |
| 1316 | |
1313 | |
| 1317 | if ( ref($correctAnswer) eq 'ARRAY' ) { |
1314 | if ( ref($correctAnswer) eq 'ARRAY' ) { |
| … | |
… | |
| 1646 | $rh_ans; |
1643 | $rh_ans; |
| 1647 | } |
1644 | } |
| 1648 | |
1645 | |
| 1649 | sub NUM_CMP { # low level numeric compare |
1646 | sub NUM_CMP { # low level numeric compare |
| 1650 | my %num_params = @_; |
1647 | my %num_params = @_; |
| 1651 | |
1648 | |
| 1652 | my @keys = qw ( correctAnswer tolerance tolType format mode zeroLevel zeroLevelTol debug ); |
1649 | my @keys = qw ( correctAnswer tolerance tolType format mode zeroLevel zeroLevelTol debug ); |
| 1653 | foreach my $key (@keys) { |
1650 | foreach my $key (@keys) { |
| 1654 | warn "$key must be defined in options when calling NUM_CMP" unless defined ($num_params{$key}); |
1651 | warn "$key must be defined in options when calling NUM_CMP" unless defined ($num_params{$key}); |
| 1655 | } |
1652 | } |
| 1656 | |
1653 | |