root / synthbench / euroben-dm / mod2g / log2.f @ 0:839f52ef7657
History | View | Annotate | Download (943 Bytes)
1 |
Integer Function log2( n ) |
---|---|
2 |
! --------------------------------------------------------------------- |
3 |
Implicit None |
4 |
Integer :: n |
5 |
|
6 |
Integer :: m, nl |
7 |
! --------------------------------------------------------------------- |
8 |
If ( n < 1 ) Then |
9 |
Print *, '*** ERROR in function LOG2: Argument ', n, |
10 |
& ' is not valid. (< 1).' |
11 |
log2 = -1 |
12 |
Return |
13 |
End If |
14 |
If ( n == 1 ) Then |
15 |
log2 = 0 |
16 |
Return |
17 |
End If |
18 |
nl = n |
19 |
m = 0 |
20 |
Do |
21 |
If ( Mod( nl, 2 ) /= 0 .AND. ( nl /= 1 ) ) Then |
22 |
Print *, '***ERROR in function LOG2: Argument ', n, |
23 |
& ' is not a power of 2.' |
24 |
log2 = -1 |
25 |
Return |
26 |
End If |
27 |
If ( nl == 1 ) Exit |
28 |
nl = nl/2 |
29 |
m = m + 1 |
30 |
End Do |
31 |
log2 = m |
32 |
! --------------------------------------------------------------------- |
33 |
End Function log2 |