#! /usr/bin/ksh # integertest - test value range for integer variables # Heiner Steven # @(#) integertest 1.1 02/04/29 # # Tested with # Linux: pdksh, ksh93, bash # Solaris 9/SPARC: ksh, ksh93, bash #trap 'exit 1' ERR # Find an approximation of the largest number fast by exponential # approximation typeset -i i=2 typeset -i next=$i+1 while (( $next > $i && $next > 0 )) do ((i=$next)) ((next=$i*2)) done # Max. value is between $i and $i*2 typeset -i span=$i/2 while (($span >= 1)) do ((next=$i+$span)) if (( $next > $i && $next > 0 )) then # valid number i=$next else # number too large ((span=$span/2)) fi done echo "max integer value: $i" ######################################################################### # Now repeat the process for negative values ######################################################################### i=0 ((next=$i-1)) while (( $next < $i && $next < 0 )) do ((i=$next)) ((next=$i*2)) done # Minimal value is between $i*2 and $i typeset -i span=$i/2 (($span < 0)) && ((span=-1*$span)) while (($span >= 1)) do ((next=$i-$span)) if (( $next < $i && $next < 0 )) then # valid number i=$next else # number too large, decrease increment ((span=$span/2)) fi done echo "min integer value: $i"