|
DataMuseum.dkPresents historical artifacts from the history of: CP/M |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about CP/M Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - download
Length: 3072 (0xc00) Types: TextFile Names: »NATLOG.SRC«
└─⟦c9df7130d⟧ Bits:30005915 Pascal MT+ Release 5.2 (Jet-80) └─ ⟦this⟧ »NATLOG.SRC«
; intrinsic function for calculating natural log ; NAME NATLOG ENTRY LN,L134 EXT FPSQR,RNGERR INCLUDE DEFLT.SRC INCLUDE FCTMAC.SRC ; L118 EQU FPSQR ; ; ; function ln( x: real ): real; ; const c1 = 2.8853913; ; c3 = 0.9614706; ; c5 = 0.59897865; ; sqrtp5 = 0.7071068; ; loge2 = 0.6931472; ; var y: record ; case char of ; 'a': ( a: real ); ; 'b': ( b1, b2, b3, b4: 0..255 ) ; end; ; z, z2: real; ; i: integer; ; begin L134: ln: ENTR D,2,14 PUSH IX ;check if x is a negative number POP H LXI B,10 ;byte containing sign bit of mantissa DAD B BIT 7,M ;test bit JNZ RNGERR ;negative number, error message and abort ; if x = 1.0 then ln := 0.0 LXI H,-4 DADD S SPHL XCHG PUSH IX POP H LXI B,8 DADD B LXI B,4 LDIR LXI H,320 MOV D,A MOV E,A PUSH H PUSH D EQUL D,-4 JNC FC2193 ; else begin MOV H,A MOV L,A MOV D,A MOV E,A PUSH H PUSH D LXI H,3 DADD S XCHG PUSH IX POP H LXI B,15 DADD B XCHG LXI B,4 LDDR POP H POP H JMP FC2206 FC2193 ; y.a := x; LXI H,-4 DADD S SPHL XCHG PUSH IX POP H LXI B,8 DADD B LXI B,4 LDIR LXI H,3 DADD S XCHG PUSH IX POP H LXI B,-10 DADD B XCHG LXI B,4 LDDR POP H POP H ; i := (y.b1 + 128) mod 256 - 128; MOV H,A MOV L,-10(IX) LXI D,128 DADD D,0 LXI D,256 MMOD D,0 LXI D,-128 DADD D,0 MOV -8(IX),H MOV -9(IX),L ; y.b1 := 0; MOV -10(IX),A ; z := (y.a - sqrtp5) / (y.a + sqrtp5); LXI H,-4 DADD S SPHL XCHG PUSH IX POP H LXI B,-13 DADD B LXI B,4 LDIR LXI H,90 LXI D,-32135 PUSH H PUSH D DSUB D,-4 LXI H,-4 DADD S SPHL XCHG PUSH IX POP H LXI B,-13 DADD B LXI B,4 LDIR LXI H,90 LXI D,-32135 PUSH H PUSH D DADD D,-4 FDVD D,-4 LXI H,3 DADD S XCHG PUSH IX POP H XCHG LXI B,4 LDDR POP H POP H ; z2 := sqr( z ); LXI H,-4 DADD S SPHL XCHG PUSH IX POP H DCX H DCX H DCX H LXI B,4 LDIR CALL L118 LXI H,3 DADD S XCHG PUSH IX POP H LXI B,-4 DADD B XCHG LXI B,4 LDDR POP H POP H ; ln := (((c5*z2 + c3)*z2 + c1)*z - 0.5 + i) * loge2; LXI H,76 LXI D,-21675 PUSH H PUSH D LXI H,-4 DADD S SPHL XCHG PUSH IX POP H LXI B,-7 DADD B LXI B,4 LDIR MULT D,-4 LXI H,123 LXI D,4471 PUSH H PUSH D DADD D,-4 LXI H,-4 DADD S SPHL XCHG PUSH IX POP H LXI B,-7 DADD B LXI B,4 LDIR MULT D,-4 LXI H,604 LXI D,21792 PUSH H PUSH D DADD D,-4 LXI H,-4 DADD S SPHL XCHG PUSH IX POP H DCX H DCX H DCX H LXI B,4 LDIR MULT D,-4 LXI H,64 MOV D,A MOV E,A PUSH H PUSH D DSUB D,-4 MOV L,-9(IX) MOV H,-8(IX) PUSH H CVTF B DADD D,-4 LXI H,88 LXI D,-18164 PUSH H PUSH D MULT D,-4 LXI H,3 DADD S XCHG PUSH IX POP H LXI B,15 DADD B XCHG LXI B,4 LDDR POP H POP H ; end ; end; FC2206 EXIT D,4 ; «eof»