Price fraction: Difference between revisions
Content deleted Content added
added perl6 |
→{{header|Perl 6}}: take a more readable brute force approach, for some definition of brute |
||
Line 801: | Line 801: | ||
return $2 if $0 <= $value < $1; |
return $2 if $0 <= $value < $1; |
||
} |
} |
||
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 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> |
}</lang> |
||