All pastes #513627 Raw Edit

Miscellany

public text v1 · immutable
#513627 ·published 2007-05-27 10:25 UTC
rendered paste body
#! /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"