Beefy Boxes and Bandwidth Generously Provided by pair Networks
Your skill will accomplish
what the force of many cannot
 
PerlMonks  

Re^4: Compare two dates - what's Renard Series?

by daxim (Curate)
on Jul 25, 2019 at 12:24 UTC ( [id://11103366]=note: print w/replies, xml ) Need Help??


in reply to Re^3: Compare two dates - what's Renard Series?
in thread Compare two dates

what Prefered Numbers are
Illustration with an example for programmers: you wish to show result list entries and provide a drop-down that selects the number of displayed items per page. What values do you put there?

The number system in common use is base 10, so we likely want to have 10, 100, 1000 in there. That's not fine-grained enough for practical use in most cases. Let's make it evenly spaced in between each magnitude and explore for seven and three steps, each.

› $a = 10 10 › sprintf '%.f', $a += (100-10)/7 23 › sprintf '%.f', $a += (100-10)/7 36 › sprintf '%.f', $a += (100-10)/7 49 › sprintf '%.f', $a += (100-10)/7 61 › sprintf '%.f', $a += (100-10)/7 74 › sprintf '%.f', $a += (100-10)/7 87 › sprintf '%.f', $a += (100-10)/7 100 › $a = 10 10 › sprintf '%.f', $a += (100-10)/3 40 › sprintf '%.f', $a += (100-10)/3 70 › sprintf '%.f', $a += (100-10)/3 100
That does not feel good for the seven scale. There is no meaningful difference between 74 and 87, when confronted with that choice, a user might pick either one by random chance. That's because humans instinctively operate on a scale that is lopsided with increasingly larger steps towards the "heavy" end: the geometric progression. It's still evenly spaced, just not additively, but multiplicatively. From observing nature, we also know that's much more common. Trying it out:
› $a = 10 10 › sprintf '%.f', $a *= 10**(1/7) 14 › sprintf '%.f', $a *= 10**(1/7) 19 › sprintf '%.f', $a *= 10**(1/7) 27 › sprintf '%.f', $a *= 10**(1/7) 37 › sprintf '%.f', $a *= 10**(1/7) 52 › sprintf '%.f', $a *= 10**(1/7) 72 › sprintf '%.f', $a *= 10**(1/7) 100 › $a = 10 10 › sprintf '%.f', $a *= 10**(1/3) 22 › sprintf '%.f', $a *= 10**(1/3) 46 › sprintf '%.f', $a *= 10**(1/3) 100
That feels better. On the seven scale, the initial values are too tight, that's because we have so many steps, let's discard this scale. For the remaining scale, rouding the numbers (to most significant digit), we get preferred numbers, expressed as the series: 10, 20, 50, 100, 200, 500, 1000, …. Let's put those in the drop-down.
# playground my ($start, $end) = (10, 100); # try: (35, 7400) for my $step (1..20) { printf 'step %2d:', $step; my $i = $start; for (1..$step+1) { printf ' %.f', $i; $i *= ($end/$start)**(1/$step); } print "\n"; } __END__ step 1: 10 100 step 2: 10 32 100 step 3: 10 22 46 100 step 4: 10 18 32 56 100 step 5: 10 16 25 40 63 100 step 6: 10 15 22 32 46 68 100 step 7: 10 14 19 27 37 52 72 100 step 8: 10 13 18 24 32 42 56 75 100 step 9: 10 13 17 22 28 36 46 60 77 100 step 10: 10 13 16 20 25 32 40 50 63 79 100 step 11: 10 12 15 19 23 28 35 43 53 66 81 100 step 12: 10 12 15 18 22 26 32 38 46 56 68 83 100 step 13: 10 12 14 17 20 24 29 35 41 49 59 70 84 100 step 14: 10 12 14 16 19 23 27 32 37 44 52 61 72 85 100 step 15: 10 12 14 16 18 22 25 29 34 40 46 54 63 74 86 100 step 16: 10 12 13 15 18 21 24 27 32 37 42 49 56 65 75 87 100 step 17: 10 11 13 15 17 20 23 26 30 34 39 44 51 58 67 76 87 100 step 18: 10 11 13 15 17 19 22 24 28 32 36 41 46 53 60 68 77 88 100 step 19: 10 11 13 14 16 18 21 23 26 30 34 38 43 48 55 62 70 78 89 100 step 20: 10 11 13 14 16 18 20 22 25 28 32 35 40 45 50 56 63 71 79 89 1 +00

Also see – division of European money: 0.01, 0.02, 0.05, 0.10, 0.20, 0.50, 1, 2, 5, 10, 20, 50, 100… Pity the fools who have to deal with 0.25 units with no corresponding 2.5 and 25.

Replies are listed 'Best First'.
Re^5: Compare two dates - what's Renard Series?
by bliako (Monsignor) on Jul 25, 2019 at 12:43 UTC

    that's super thanks.

    Your last comment about money denominations got me thinking: another aspect of these numbers is to be able to construct sums with the shortest linear combination - e.g. use the fewest different money denominations for change of 39.43. So that's an added optimisation parameter right? Is there theory for that?

      Is there theory for that?

      Isn't it as simple as prime factors of the base (with the additional 1, of course)?

      Edit: not necessarily prime, d'oh!

        Just 1/0.1/0.01 is enough! But I want "fewest denominations" or "fewest notes per denomination" or "fewest actual notes" (notes=valid money denominations includes coins)

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://11103366]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others learning in the Monastery: (5)
As of 2024-04-25 09:57 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found