0 == 0 == 0 1 <= 1 <= 1 2 <= 2 <= 2 2 <= 3 <= 4 4 <= 4 <= 4 4 <= 5 <= 8 16384 <= 32000 <= 32768 8589934592 <= 10000000000 <= 17179869184 -2 >= -2 >= -2 -2 >= -3 >= -4 0.0625 <= .1 <= 0.125 0.0078125 <= .01 <= 0.015625 -0.0009765625 >= -.001 >= -0.001953125 5.61779104644474e+306 <= 1e307 <= 1.12355820928895e+307 8.98846567431158e+307 <= 1e308 <= 1.#INF 8.90029543402881e-308 <= 1e-307 <= 1.78005908680576e-307 #### #!/usr/bin/perl -w use strict; my $mant; BEGIN { my $max= 2; $max *= 2 until 2*$max+1 == 2*$max; $mant= pack("d",$max) ^ pack("d",2*$max-1); } sub prevPower2 { my( $n )= @_; return unpack "d", ~$mant & pack "d", $n; } sub nextPower2 { my( $n )= @_; my $p= prevPower2( $n ); $p *= 2 if $p != $n; return $p; } while( <> ) { chomp; my $dir= (qw( < = > ))[ 1 + (0<=>$_) ]; print prevPower2($_), " $dir= $_ $dir= ", nextPower2($_), $/; }