File:  [Research Unix] / researchv10dc / asm.libm / cbrt.s
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs
Tue Apr 24 17:21:34 2018 UTC (3 years, 8 months ago) by root
Branches: belllabs, MAIN
```researchv10 Dan Cross
```

```# double cbrt(arg)
# double arg
# no error exits
#method: range reduction to [1/8,1], poly appox, newtons method
# J F Jarvis, August 10,1978
.globl	_cbrt
.text
.align	1
_cbrt:
.word	0x00c0
clrl	r3
movd	4(ap),r4
jgtr	range
jeql	retz
mnegd	r4,r4	# |arg| in r0,r1
movl	\$0x100,r3	# sign bit of result
range:
extzv	\$7,\$8,r4,r6
insv	\$128,\$7,\$8,r4	# 0.5<= frac: r4,r5 <1.0
clrl	r7
ediv	\$3,r6,r6,r7	# r6= expnt/3; r7= expnt%3
bisl2	r3,r6	# sign,exponent of result
polyf	r4,\$3,pcoef	# initial estimate is Hart&Cheney CBRT 0642
# D=4.1
muld3	r0,r0,r2	# Newtons method, iteration 1, H&C 6.1.10
divd3	r2,r4,r2
subd3	r2,r0,r2
muld2	third,r2
subd2	r2,r0	# D=8.2
muld3	r0,r0,r2	# iteration 2
divd3	r2,r4,r2
subd3	r2,r0,r2
muld2	third,r2
subd2	r2,r0
muld2	hc[r7],r0	# set range
insv	r6,\$7,\$9,r0	# set sign,exponent
ret
retz:
clrd	r0
ret
.data
.align	2
third: .double 0d0.33333333333333333333e+0
hc:
.double 0d1.25992104989487316476e+0
.double 0d1.58740105196819947475e+0
.double	0d1.0e+0
pcoef:
.float 0f0.1467073818e+0
.float 0f-0.5173964673e+0
.float 0f0.9319858515e+0
.float 0f0.4387762363e+0
```

unix.superglobalmegacorp.com