#! 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