#! /usr/bin/ksh
# integertest - test value range for integer variables
# Heiner Steven <heiner.steven@odn.de>
# @(#) 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"