1
0
mirror of https://github.com/PDP-10/its.git synced 2026-04-25 03:45:11 +00:00
Files
PDP-10.its/arc/ar5:c/CFLOAT CMID
2018-05-15 07:06:17 +02:00

217 lines
3.2 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
;
; CFLOAT - FLOATING POINT STUFF
;
; This file is PDP-10 dependent, system-independent.
;
TITLE CFLOAT
.INSRT NC
.INSRT NM
; CONTAINS: LOG, EXP, COS, SIN, ATAN, SQRT, DTRUNCATE, DROUND, DABS
CENTRY LOG,[V]
MOVE B,V
JUMPLE B,OUTRNG
LDB D,[331100,,B] ;GRAB EXPONENT
SUBI D,201 ;REMOVE BIAS
TLZ B,777000 ;SET EXPONENT
TLO B,201000 ; TO 1
MOVE A,B
FSBR A,SQRT2
FADR B,SQRT2
FDVB A,B
FMPR B,B
MOVE C,[0.434259751]
FMPR C,B
FADR C,[0.576584342]
FMPR C,B
FADR C,[0.961800762]
FMPR C,B
FADR C,[2.88539007]
FMPR C,A
FADR C,[0.5]
MOVE B,D
FSC B,233
FADR B,C
FMPR B,[0.693147180] ;LOG E OF 2
MOVE A,B
RETURN
CENTRY EXP,[V]
MOVE B,V
PUSH P,B
MOVM A,B
SETZM B
FMPR A,[0.434294481] ;LOG BASE 10 OF E
MOVE D,[1.0]
CAMG A,D
GO RATEX
MULI A,400
ASHC B,-243(A)
CAILE B,43
GO OUTRNG
CAILE B,7
GO EXPR2
EXPR1: FMPR D,FLOAP1(B)
LDB A,[103300,,C]
SKIPE A
TLO A,177000
FADR A,A
RATEX: MOVEI B,7
SETZM C
RATEY: FADR C,COEF2-1(B)
FMPR C,A
SOJN B,RATEY
FADR C,[1.0]
FMPR C,C
FMPR D,C
MOVE B,[1.0]
SKIPL (P) ;SKIP IF INPUT NEGATIVE
SKIPN B,D
FDVR B,D
MOVE A,B
SUB P,[1,,1]
RETURN
EXPR2: LDB D,[030300,,B]
ANDI B,7
MOVE D,FLOAP1(D)
FMPR D,D ;TO THE 8TH POWER
FMPR D,D
FMPR D,D
GO EXPR1
COEF2: 1.15129278
0.662730884
0.254393575
0.0729517367
0.0174211199
2.55491796^-3
9.3264267^-4
FLOAP1: 1.0
10.0
100.0
1000.0
10000.0
100000.0
1000000.0
10000000.0
OUTRNG: CROAK [ARGUMENT OUT OF RANGE]
GO RTN1
CENTRY COS,[V]
MOVE B,V
FADR B,[1.570796326] ;COS(X)=SIN (X+PI/2)
CALL SIN,[B]
RTN1: RETURN
CENTRY SIN,[V]
MOVE B,V
CL .SIN
RETURN
.SIN: MOVM A,B
CAMG A,[.0001]
RTN ;GOSPER'S RECURSIVE SIN.
FDVR B,[-3.0] ;SIN(X)=4*SIN(X/-3)**3-3*SIN(X/-3)
CL .SIN
FSC A,1
FMPR A,A
FADR A,[-3.0]
FMPRB A,B
RTN
CENTRY SQRT,[V]
MOVE B,V
MOVE A,B
ASH B,-1
FSC B,100
SQ2: MOVE C,B ;NEWTON'S METHOD, SPECINER'S HACK.
FDVRM A,B
FADRM C,B
FSC B,-1
CAME C,B
GO SQ2
MOVE A,B
RETURN
CENTRY ATAN,[V],[TEMP]
MOVE B,V
MOVEM B,TEMP
MOVM D,B
CAMG D,[0.4^-8] ;SMALL ENOUGH SO ATAN(X)=X?
GO ATAN3 ;YES
CAML D,[7.0^7] ;LARGE ENOUGH SO THAT ATAN(X)=PI/2?
GO ATAN1 ;YES
MOVN C,[1.0]
CAMLE D,[1.0] ;IS ABS(X)<1.0?
FDVM C,D ;NO,SCALE IT DOWN
MOVE B,D
FMPR B,B
MOVE C,[1.44863154]
FADR C,B
MOVE A,[-0.264768620]
FDVM A,C
FADR C,B
FADR C,[3.31633543]
MOVE A,[-7.10676005]
FDVM A,C
FADR C,B
FADR C,[6.76213924]
MOVE B,[3.70925626]
FDVR B,C
FADR B,[0.174655439]
FMPR B,D
JUMPG D,ATAN2 ;WAS ARG SCALED?
FADR B,PI2 ;YES, ATAN(X)=PI/2-ATAN(1/X)
GO ATAN2
ATAN1: MOVE B,PI2
ATAN2: SKIPGE TEMP ;WAS INPUT NEGATIVE?
MOVNS B ;YES,COMPLEMENT
ATAN3: MOVE A,B
RETURN
SQRT2: 1.41421356
PI2: 3.1415926535/2
CENTRY DROUND,[V]
MOVE A,V
FADR A,[.499999]
JUMPL A,ROUND1
UFA A,[233000000000]
TLZ B,777000
GO ROUND2
ROUND1: UFA A,[233000000000]
TLO B,777000
ROUND2: MOVE A,B
RETURN
CENTRY DTRUNCATE,[V]
MOVE A,V
UFA A,[233000000000]
TLZ B,777000
MOVE A,B
RETURN
CENTRY DABS,[V]
MOVE A,V
JUMPGE A,RET
MOVN A,A
JUMPGE A,RET
TLZ A,400000
RET: RETURN
END