home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Between Heaven & Hell 2
/
BetweenHeavenHell.cdr
/
500
/
471
/
rccl101
< prev
next >
Wrap
Text File
|
1987-03-02
|
2KB
|
117 lines
# double atan(arg1); -pi/2 < atan < pi/2
#double atan2(arg1,arg2); -pi< atan2<pi
#double arg1,arg2
#method: range reduction to [sqrt(2)-1,sqrt(2)+1]
# followed by Hart&Cheney ARCTN 5076 D=17.55
# J. F. Jarvis August 8, 1978
.globl _atan
.globl _atan2
.text
.align 1
_atan:
.word 0x03c0
movd 4(ap),r0
jgtr a1
mnegd r0,r0 # atan(arg1), arg1<0
bsbb satan
mnegd r0,r0
ret
a1: bsbb satan # atan(arg1), arg1>=0
ret
#
.align 1
_atan2:
.word 0x03c0
movd 4(ap),r0 # atan(arg1/arg2)
movd 12(ap),r2
addd3 r0,r2,r4
cmpd r0,r4
jneq b1
tstd r0
jgeq b2
mnegd pio2d,r0
ret
b2: movd pio2d,r0
ret
#
b1: tstd r2
jgeq b3
divd2 r2,r0
jleq b4
bsbb satan # arg1<0, arg2<0
subd2 pi,r0
ret
b4: mnegd r0,r0 # arg1>0, arg2<0
bsbb satan
subd3 r0,pi,r0
ret
#
b3: divd2 r2,r0
jleq b5
bsbb satan # arg1>0, arg2>0
ret
b5: mnegd r0,r0 # arg1<0, arg2>0
bsbb satan
mnegd r0,r0
ret
#
.globl satan
satan: # range reduction on positive arg(r0)
cvtdf r0,r0
cmpf r0,sq2m1
jgeq c1
bsbb xatan
rsb
c1: cmpf r0,sq2p1
jleq c2
divf3 r0,$0d1.0e+0,r0
bsbb xatan
subf3 r0,pio2f,r0
rsb
c2: addf3 $0d1.0e+0,r0,r2
subf2 $0d1.0e+0,r0
divf2 r2,r0
bsbb xatan
addf2 pio4f,r0
cvtfd r0,r0
rsb
#
xatan: # compute arctan(r0) for:sqrt(2)-1<r0<sqrt(2)+1
# Hart&Cheney ARCTN 5076 is evaluated
cvtdf r0,r0
movf r0,r8
mulf3 r0,r0,r6
polyf r6,$4,pcoef
mulf2 r0,r8
polyf r6,$4,qcoef
divf3 r0,r8,r0
cvtdf r0,r0
rsb
.data
.align 2
pcoef:
.float 0d0.1589740288482307048e+0
.float 0d0.66605790170092626575e+1
.float 0d0.40969264832102256374e+2
.float 0d0.77477687719204208616e+2
.float 0d0.44541340059290680319e+2
qcoef:
.float 0d1.0e+0
.float 0d0.15503977551421987525e+2
.float 0d0.62835930511032376833e+2
.float 0d0.92324801072300974840e+2
.float 0d0.44541340059290680444e+2
pio4f: .float 0d0.78539816339744830961e+0
pio2d: .double 0d1.57079632679489661923e+0
pio2f: .float 0d1.57079632679489661923e+0
sq2p1: .float 0d2.41421356237309504880e+0
sq2m1: .float 0d0.41421356237309504880e+0
pi: .double 0d3.14159265358979323846e+0