Price fraction: Difference between revisions

→‎{{header|Perl 6}}: take a more readable brute force approach, for some definition of brute
(added perl6)
(→‎{{header|Perl 6}}: take a more readable brute force approach, for some definition of brute)
Line 801:
return $2 if $0 <= $value < $1;
}
return fail "Out of range";
}</lang>
Perhaps a better approach is just to build an array of 101 entries. Memory is cheap, and array lookup is blazing fast, especially important if used in a loop as below. Moreover, in Perl&nbsp;6 we don't have to worry about floating point misrepresentations of decimals because decimal fractions are stored as rationals.
 
<lang perl6>my @price = map *.value,
( 0 ..^ 6 X=> 0.10),
( 6 ..^ 11 X=> 0.18),
(11 ..^ 16 X=> 0.26),
(16 ..^ 21 X=> 0.32),
(21 ..^ 26 X=> 0.38),
(26 ..^ 31 X=> 0.44),
(31 ..^ 36 X=> 0.50),
(36 ..^ 41 X=> 0.54),
(41 ..^ 46 X=> 0.58),
(46 ..^ 51 X=> 0.62),
(51 ..^ 56 X=> 0.66),
(56 ..^ 61 X=> 0.70),
(61 ..^ 66 X=> 0.74),
(66 ..^ 71 X=> 0.78),
(71 ..^ 76 X=> 0.82),
(76 ..^ 81 X=> 0.86),
(81 ..^ 86 X=> 0.90),
(86 ..^ 91 X=> 0.94),
(91 ..^ 96 X=> 0.98),
(96 ..^101 X=> 1.00),
;
 
while prompt("value: ") -> $value {
say @price[ $value * 100 ] // note "Out of range";
}</lang>
 
Anonymous user