| 1 | ONCOSCOM ;WASH ISC/SRR-COMPUTATIONAL SUBROUTINES ;4/16/92  18:25 | 
|---|
| 2 | ;;2.11;ONCOLOGY;;Mar 07, 1995 | 
|---|
| 3 | ;This module contains entry points for the following computations: | 
|---|
| 4 | ; EXP     - compute the exponential | 
|---|
| 5 | ; LOG10   - compute log to base 10 | 
|---|
| 6 | ; LOG2    - compute log to base 2 | 
|---|
| 7 | ; SQ      - compute the square root | 
|---|
| 8 | ; | 
|---|
| 9 | ; | 
|---|
| 10 | EXP ;compute the exponential EXP(X) | 
|---|
| 11 | ;in:  X = argument must be less than 55.26 | 
|---|
| 12 | ;out: Y = EXP(X) | 
|---|
| 13 | ;     Z = 1 for any problem in evaluations, 0 otherwise | 
|---|
| 14 | N F,I,LE,LZ,S | 
|---|
| 15 | S LE=.434294482,LZ=X,X=LE*X | 
|---|
| 16 | S Z=0,S=0 I X=0 S Y=1 G QEXP | 
|---|
| 17 | I +X'=X S Z=1 G QEXP | 
|---|
| 18 | I X<0 S S=1,X=-X | 
|---|
| 19 | S F=X#1,I=X\1,I="1E"_$E("-",S&I)_I | 
|---|
| 20 | S Y=.00093264267*F+0.00255491796*F+0.01742111988*F+0.07295173666*F+0.25439357484*F+0.66273088429*F+1.15129277603*F+1 | 
|---|
| 21 | S Y=Y*Y | 
|---|
| 22 | QEXP S:S Y=1/Y S Y=+$J(Y+0.000000005,0,8),Y=Y*I,X=LZ | 
|---|
| 23 | Q | 
|---|
| 24 | ; | 
|---|
| 25 | LOGE ;compute log to base E | 
|---|
| 26 | ;arguments same as LOG10 | 
|---|
| 27 | D LOG2 I 'Z S Y=+$J(Y/1.44269504,0,8) | 
|---|
| 28 | Q | 
|---|
| 29 | ; | 
|---|
| 30 | LOG10 ;compute log to base 10 | 
|---|
| 31 | ;in:  X = argument | 
|---|
| 32 | ;out: Y = LOG10(X) | 
|---|
| 33 | ;     Z = 1 if Y not evaluated, 0 otherwise | 
|---|
| 34 | D LOG2 I 'Z S Y=+$J(Y/3.321928096,0,8) | 
|---|
| 35 | Q | 
|---|
| 36 | ; | 
|---|
| 37 | LOG2 ;compute log to base 2 | 
|---|
| 38 | ;arguments are as above | 
|---|
| 39 | N LU,LV,LZ | 
|---|
| 40 | I X'>0!(+X'=X) S Z=1 Q | 
|---|
| 41 | S LZ=$L($P(X,".",1)) | 
|---|
| 42 | I LZ S X="."_$E(X,1,LZ)_$E(X,LZ+2,255),X=+X | 
|---|
| 43 | E  F LZ=LZ:-1 Q:X'<.1  S X=X*10 | 
|---|
| 44 | F Y=0:1:3 Q:X'<.5  S X=X*2 | 
|---|
| 45 | S LU=X-.707106781/(X+.707106781),LV=LU*LU | 
|---|
| 46 | S LU=.434259751292*LV+.576584342056*LV+.961800762286*LV+2.885390072738*LU | 
|---|
| 47 | S Y=+$J(LZ*3.321928096+LU-Y-.5,0,8),Z=0 | 
|---|
| 48 | Q | 
|---|
| 49 | ; | 
|---|
| 50 | SQ ;compute square root | 
|---|
| 51 | ;in:  X = argument for square root | 
|---|
| 52 | ;out: Y = sq root of X if X'<0, of -X if X<0 | 
|---|
| 53 | ;     Z = 1 if X<0, 0 otherwise | 
|---|
| 54 | S Z=(X<0) I X=0 S Y=0 Q | 
|---|
| 55 | I Z S X=-X | 
|---|
| 56 | I X>1 S Y=X\1 | 
|---|
| 57 | E  S Y=1/X | 
|---|
| 58 | S Y=$E(Y,1,$L(Y)+1\2) | 
|---|
| 59 | E  S Y=1/Y | 
|---|
| 60 | F %=1:1:6 S Y=X/Y+Y*.5 | 
|---|
| 61 | Q | 
|---|
| 62 | ; | 
|---|
| 63 | TEST ;test LOGE & EXP | 
|---|
| 64 | N I | 
|---|
| 65 | F I=1:1:20 W !,I,?10 S X=I*1.33333 W X D LOGE W ?25,Y S X=Y D EXP W ?40,Y,?60,Z | 
|---|
| 66 | Q | 
|---|