in reply to Re: [OT] Mysterious function.
in thread [OT] Mysterious function. (Updated)
Thanks. You inspired a way to work out the transition points:
#! perl -slw use strict; sub func { my $vv = shift; my $bb = 140*24*60*60*1000; ##140 days if( $vv >= $bb ) { ##140 days < 5 months $bb = 8766*60*60*1000;##1 year if( $vv < $bb ) { return( $bb/12 ); } ## 1 year + ##1 month if( $vv < $bb *2 ) { return( $bb/6 ); } ## 2 years + ##2 month if( $vv < $bb *5/2 ) { return( $bb/4 ); } ## 2.5 years + ##3 month if( $vv < $bb *5 ) { return( $bb/2 ); } ## 5 years + ##6 month if( $vv < $bb *10 ) { return( $bb ); } ## 10 years + ##1 year if( $vv < $bb *20 ) { return( $bb*2 ); } ## 20 years + ##2 years if( $vv < $bb *50 ) { return( $bb*5 ); } ## 50 years + ##5 years if( $vv < $bb *100 ) { return( $bb*10 ); } ## 100 years + ##10 years if( $vv < $bb *200 ) { return( $bb*20 ); } ## 200 years + ##20 years if( $vv < $bb *500 ) { return( $bb*50 ); } ## 500 years + ##50 years return( $bb*100 ); ##100 years } $bb /= 2; ##70 days if( $vv >= $bb ) { return( $bb/5 ); } ##14 days $bb /= 2; ##35 days if( $vv >= $bb ) { return( $bb/5 ); } ##7 days $bb /= 7; $bb *= 4; ##20 days if( $vv >= $bb ) { return( $bb/5 ); } ##4 days $bb /= 2; ##10 days if( $vv >= $bb ) { return( $bb/5 ); } ##2 days $bb /= 2; ##5 days if( $vv >= $bb ) { return( $bb/5 ); } ##1 day $bb /= 2; ##2.5 days if( $vv >= $bb ) { return( $bb/5 ); } ##12 hours $bb *= 3; $bb /= 5; ##1.5 day if( $vv >= $bb ) { return( $bb/6 ); } ##6 hours $bb /= 2; ##18 hours if( $vv >= $bb ) { return( $bb/6 ); } ##3 hours $bb *= 2; $bb /= 3; ##12 hours if( $vv >= $bb ) { return( $bb/6 ); } ##2 hours $bb /= 2; ##6 hours if( $vv >= $bb ) { return( $bb/6 ); } ##1 hour $bb /= 2; ##3 hours if( $vv >= $bb ) { return( $bb/6 ); } ##30 mins $bb /= 2; ##1.5 hours if( $vv >= $bb ) { return( $bb/6 ); } ##15 mins $bb *= 2; $bb /= 3; ##1 hour if( $vv >= $bb ) { return( $bb/6 ); } ##10 mins $bb /= 3; ##20 mins if( $vv >= $bb ) { return( $bb/4 ); } ##5 mins $bb /= 2; ##10 mins if( $vv >= $bb ) { return( $bb/5 ); } ##2 mins $bb /= 2; ##5 mins if( $vv >= $bb ) { return( $bb/5 ); } ##1 min $bb *= 3; $bb /= 2; ##3 mins if( $vv >= $bb ) { return( $bb/6 ); } ##30 secs $bb /= 2; ##1.5 mins if( $vv >= $bb ) { return( $bb/6 ); } ##15 secs $bb *= 2; $bb /= 3; ##1 min if( $vv >= $bb ) { return( $bb/6 ); } ##10 secs $bb /= 3; ##20 secs if( $vv >= $bb ) { return( $bb/4 ); } ##5 secs $bb /= 2; ##10 secs if( $vv >= $bb ) { return( $bb/5 ); } ##2 secs return( $bb/10 ); ##1 sec } my $last = 0; my $step = 2500; for( my $i = 1; $i < 100*365.25*24*60*60*1000; $i += $step ) { my $new = func( $i ); if( $new > $last ) { printf "%20u -> %20u\n", $i, $new; $step = ( $new - $last ) / 10; $last = $new; } } __END__ [19:49:46.77] E:\Chart>junk 1 -> 2500 25001 -> 5000 50001 -> 12500 150501 -> 25000 225501 -> 37500 300501 -> 60000 602001 -> 120000 1202001 -> 300000 3614001 -> 600000 5414001 -> 900000 10814001 -> 1800000 21614001 -> 3600000 43214001 -> 7200000 64814001 -> 10800000 129614001 -> 21600000 216014001 -> 43200000 432014001 -> 86400000 864014001 -> 172800000 1728014001 -> 345600000 3024014001 -> 604800000 6056654001 -> 1209600000 12104654001 -> 2629800000 31561394001 -> 5259600000 63118994001 -> 7889400000 78897794001 -> 15778800000 157791794001 -> 31557600000 315579794001 -> 63115200000 631155794001 -> 157788000000 1577883794001 -> 315576000000
I used node.js to produce some interesting edge cases.
'scuse my ignorance, but does node.js allow you to run JS at the command line?
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^3: [OT] Mysterious function.
by jeffa (Bishop) on Apr 23, 2015 at 19:29 UTC |