Main Page | Class Hierarchy | Alphabetical List | Data Structures | File List | Data Fields | Globals

ilog2_.F

Go to the documentation of this file.
00001 
00002 c*          (c) Copyright 2001-2002 Brown Deer Technology, LLC.
00003 c*                        All rights reserved.
00004 
00005         subroutine ilog2( val, iresult )
00006         real val
00007         integer iresult
00008         integer i,imin,imax
00009         real absval,v,vmin,vmax
00010         real power2(-64:63)
00011         data    
00012      & power2(-64) /5.42101086E-20/, power2(-63) /1.08420217E-19/,
00013      & power2(-62) /2.16840434E-19/, power2(-61) /4.33680869E-19/,
00014      & power2(-60) /8.67361738E-19/, power2(-59) /1.73472348E-18/,
00015      & power2(-58) /3.46944695E-18/, power2(-57) /6.9388939E-18/,
00016      & power2(-56) /1.38777878E-17/, power2(-55) /2.77555756E-17/,
00017      & power2(-54) /5.55111512E-17/, power2(-53) /1.11022302E-16/,
00018      & power2(-52) /2.22044605E-16/, power2(-51) /4.4408921E-16/,
00019      & power2(-50) /8.8817842E-16/, power2(-49) /1.77635684E-15/,
00020      & power2(-48) /3.55271368E-15/, power2(-47) /7.10542736E-15/,
00021      & power2(-46) /1.42108547E-14/, power2(-45) /2.84217094E-14/,
00022      & power2(-44) /5.68434189E-14/, power2(-43) /1.13686838E-13/,
00023      & power2(-42) /2.27373675E-13/, power2(-41) /4.54747351E-13/,
00024      & power2(-40) /9.09494702E-13/, power2(-39) /1.8189894E-12/,
00025      & power2(-38) /3.63797881E-12/, power2(-37) /7.27595761E-12/,
00026      & power2(-36) /1.45519152E-11/, power2(-35) /2.91038305E-11/,
00027      & power2(-34) /5.82076609E-11/, power2(-33) /1.16415322E-10/,
00028      & power2(-32) /2.32830644E-10/, power2(-31) /4.65661287E-10/,
00029      & power2(-30) /9.31322575E-10/, power2(-29) /1.86264515E-09/,
00030      & power2(-28) /3.7252903E-09/, power2(-27) /7.4505806E-09/,
00031      & power2(-26) /1.49011612E-08/, power2(-25) /2.98023224E-08/,
00032      & power2(-24) /5.96046448E-08/, power2(-23) /1.1920929E-07/,
00033      & power2(-22) /2.38418579E-07/, power2(-21) /4.76837158E-07/,
00034      & power2(-20) /9.53674316E-07/, power2(-19) /1.90734863E-06/,
00035      & power2(-18) /3.81469727E-06/, power2(-17) /7.62939453E-06/,
00036      & power2(-16) /1.52587891E-05/, power2(-15) /3.05175781E-05/,
00037      & power2(-14) /6.10351562E-05/, power2(-13) /0.000122070312/,
00038      & power2(-12) /0.000244140625/, power2(-11) /0.00048828125/,
00039      & power2(-10) /0.0009765625/, power2(-9) /0.001953125/,
00040      & power2(-8) /0.00390625/, power2(-7) /0.0078125/,
00041      & power2(-6) /0.015625/, power2(-5) /0.03125/,
00042      & power2(-4) /0.0625/, power2(-3) /0.125/,
00043      & power2(-2) /0.25/, power2(-1) /0.5/,
00044      & power2(0) /1./, power2(1) /2./,
00045      & power2(2) /4./, power2(3) /8./,
00046      & power2(4) /16./, power2(5) /32./,
00047      & power2(6) /64./, power2(7) /128./,
00048      & power2(8) /256./, power2(9) /512./,
00049      & power2(10) /1024./, power2(11) /2048./,
00050      & power2(12) /4096./, power2(13) /8192./,
00051      & power2(14) /16384./, power2(15) /32768./,
00052      & power2(16) /65536./, power2(17) /131072./,
00053      & power2(18) /262144./, power2(19) /524288./,
00054      & power2(20) /1048576./, power2(21) /2097152./,
00055      & power2(22) /4194304./, power2(23) /8388608./,
00056      & power2(24) /16777216./, power2(25) /33554432./,
00057      & power2(26) /67108864./, power2(27) /134217728./,
00058      & power2(28) /268435456./, power2(29) /536870912./,
00059      & power2(30) /1.07374182E+09/, power2(31) /2.14748365E+09/,
00060      & power2(32) /4.2949673E+09/, power2(33) /8.58993459E+09/,
00061      & power2(34) /1.71798692E+10/, power2(35) /3.43597384E+10/,
00062      & power2(36) /6.87194767E+10/, power2(37) /1.37438953E+11/,
00063      & power2(38) /2.74877907E+11/, power2(39) /5.49755814E+11/,
00064      & power2(40) /1.09951163E+12/, power2(41) /2.19902326E+12/,
00065      & power2(42) /4.39804651E+12/, power2(43) /8.79609302E+12/,
00066      & power2(44) /1.7592186E+13/, power2(45) /3.51843721E+13/,
00067      & power2(46) /7.03687442E+13/, power2(47) /1.40737488E+14/,
00068      & power2(48) /2.81474977E+14/, power2(49) /5.62949953E+14/,
00069      & power2(50) /1.12589991E+15/, power2(51) /2.25179981E+15/,
00070      & power2(52) /4.50359963E+15/, power2(53) /9.00719925E+15/,
00071      & power2(54) /1.80143985E+16/, power2(55) /3.6028797E+16/,
00072      & power2(56) /7.2057594E+16/, power2(57) /1.44115188E+17/,
00073      & power2(58) /2.88230376E+17/, power2(59) /5.76460752E+17/,
00074      & power2(60) /1.1529215E+18/, power2(61) /2.30584301E+18/,
00075      & power2(62) /4.61168602E+18/, power2(63) /9.22337204E+18/
00076 
00077         imin = -64
00078         i = 0
00079         imax = 63
00080 
00081         absval = abs(val)
00082 
00083         vmin = 5.42101086E-20
00084         v = 1. 
00085         vmax = 9.22337204E+18
00086 
00087         if ( absval .ge. vmax ) then 
00088            iresult = imax
00089         elseif ( absval .le. vmim ) then 
00090            iresult = imin
00091         else
00092            do while ( imax-imin .gt. 1 )
00093               if ( absval .ge. v ) then
00094                  imin = i
00095                  vmin = v
00096               else
00097                  imax = i
00098                  vmax = v
00099               endif
00100               i=(imax+imin)/2
00101               v=power2(i)
00102            enddo
00103            iresult = imin
00104         endif
00105 
00106         return
00107 
00108         end
00109         

Generated on Mon May 31 21:38:48 2004 for SR2k4 Assembler by doxygen 1.3.6