I know you've said you better understand it now... but there was a small point that I like, that I don't think was brought out enough. Like AnomalousMonk's link to resistor tolerances implies (but doesn't say explicitly enough, IMO): one of the nice things about the series is that it keeps allowable tolerance consistent. If you're manufacturing widgets, and your manufacturing has 0.1mm tolerance, then doing widgets in sizes 1,2,3,4,5,6,7,8,9,10 is reasonable; none of the widget sizes will overlap. But if you manufacture with 10% tolerance, then the step from 1 to 2 is fine, because 1+10%=1.1 doesn't overlap with 2-10%=1.8. But at the step from 9 to 10, 9+10%=9.9 and 10-10%=9, so a value of 9 is a technically valid 9+-10% or 10+/-10% widget. If you count the "maximum allowable tolerance" as the point where the lower value shifted up by the tolerance and the upper value shifted down by the tolerance are equals, then you can see:

#!/usr/bin/env perl # Preferred Numbers: https://perlmonks.org/?node_id=11103336 my $prev = 1; for my $this ( 2 .. 10 ) { # an x% change can fit between $prev and $this # x% changes, depending on $this # Overlap will start if x% is such that prev * (1+x%) == this * (1 +-x%) # algebra: # p*(1+x) = t*(1-x) # p + px = t - tx # (p+t)x = t-p # x = (t-p)/(p+t) # x% = 100%*x my $xpct = ($this-$prev) / ($this+$prev) * 100; printf "linear: %.2f .. %.2f => %.2f%%\n", $prev, $this, $xpct; } continue { $prev = $this; } print "\n"; my $prev = 1; for my $i ( 1 .. 10 ) { # now go in 10 logarithmic steps $this = $prev * (10**(1/10)); my $xpct = ($this-$prev) / ($this+$prev) * 100; printf "logarithmic: %.2f .. %.2f => %.2f%%\n", $prev, $this, $xpc +t; } continue { $prev = $this; } print "\n"; my $prev = 1; for my $i ( 1 .. 10 ) { # now go in 10 logarithmic steps $this = 10**($i/10); my $round_p = int($prev*10+0.5)/10; my $round_t = int($this*10+0.5)/10; my $xpct = ($round_t-$round_p) / ($round_t+$round_p) * 100; printf "rounded logarithmic: %.2f .. %.2f => %.2f%%\n", $round_p, +$round_t, $xpct; } continue { $prev = $this; } __END__ linear: 1.00 .. 2.00 => 33.33% linear: 2.00 .. 3.00 => 20.00% linear: 3.00 .. 4.00 => 14.29% linear: 4.00 .. 5.00 => 11.11% linear: 5.00 .. 6.00 => 9.09% linear: 6.00 .. 7.00 => 7.69% linear: 7.00 .. 8.00 => 6.67% linear: 8.00 .. 9.00 => 5.88% linear: 9.00 .. 10.00 => 5.26% logarithmic: 1.00 .. 1.26 => 11.46% logarithmic: 1.26 .. 1.58 => 11.46% logarithmic: 1.58 .. 2.00 => 11.46% logarithmic: 2.00 .. 2.51 => 11.46% logarithmic: 2.51 .. 3.16 => 11.46% logarithmic: 3.16 .. 3.98 => 11.46% logarithmic: 3.98 .. 5.01 => 11.46% logarithmic: 5.01 .. 6.31 => 11.46% logarithmic: 6.31 .. 7.94 => 11.46% logarithmic: 7.94 .. 10.00 => 11.46% rounded logarithmic: 1.00 .. 1.30 => 13.04% rounded logarithmic: 1.30 .. 1.60 => 10.34% rounded logarithmic: 1.60 .. 2.00 => 11.11% rounded logarithmic: 2.00 .. 2.50 => 11.11% rounded logarithmic: 2.50 .. 3.20 => 12.28% rounded logarithmic: 3.20 .. 4.00 => 11.11% rounded logarithmic: 4.00 .. 5.00 => 11.11% rounded logarithmic: 5.00 .. 6.30 => 11.50% rounded logarithmic: 6.30 .. 7.90 => 11.27% rounded logarithmic: 7.90 .. 10.00 => 11.73%

The linear scale wastes a lot of the tolerance near the low end, so you can have 30%, but at the high end, you can really only have 5% tolerance on the widgets. However, if you're doing 5% widgets, at the low end, you'll have big gaps, and a customer will complain that they want an intermediate value. With the even-logarithmic steps, every step between sizes will have the same amount of "room" for the tolerances, so if you can manufacture the widgets with 10% tolerance, they'll all nicely fit, with no overlap between sizes. (Even with some rounding on the Preferred Numbers in the 10-logarithmic steps will still show about the same tolerance range, and can handle 10% tolerance just fine.)


In reply to Re^4: Compare two dates - what's Renard Series? by pryrt
in thread Compare two dates by Anonymous Monk

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.