mirror of
https://github.com/PDP-10/its.git
synced 2026-03-23 09:19:24 +00:00
209 lines
2.9 KiB
Plaintext
209 lines
2.9 KiB
Plaintext
;
|
||
; CFLOAT - FLOATING POINT STUFF
|
||
;
|
||
; This file is PDP-10 dependent, system-independent.
|
||
;
|
||
|
||
TITLE CFLOAT
|
||
.INSRT SS:<C>CINSRT
|
||
.INSRT SS:<C>MINSRT
|
||
|
||
; 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]
|
||
CAIE A,0
|
||
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
|
||
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
|
||
PUSHJ P,.SIN
|
||
RETURN
|
||
|
||
.SIN: MOVM A,B
|
||
CAMG A,[.0001]
|
||
POPJ P, ;GOSPER'S RECURSIVE SIN.
|
||
FDVR B,[-3.0] ;SIN(X)=4*SIN(X/-3)**3-3*SIN(X/-3)
|
||
PUSHJ P,.SIN
|
||
FSC A,1
|
||
FMPR A,A
|
||
FADR A,[-3.0]
|
||
FMPRB A,B
|
||
POPJ P,
|
||
|
||
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]
|
||
|
||
MOVM A,V
|
||
FADR A,[.499999]
|
||
FIX A,A
|
||
SKIPGE V
|
||
MOVN A,A
|
||
RETURN
|
||
|
||
CENTRY DTRUNCATE,[V]
|
||
|
||
FIX A,V
|
||
RETURN
|
||
|
||
CENTRY DABS,[V]
|
||
|
||
MOVE A,V
|
||
JUMPGE A,RET
|
||
MOVN A,A
|
||
JUMPGE A,RET
|
||
TLZ A,400000
|
||
RET: RETURN
|
||
|
||
END
|
||
|