home *** CD-ROM | disk | FTP | other *** search
-
- * Maxon C++:
- * Library "math_pwr10"
- * Jens Gelhar 29.10.91, 15.04.94
-
- xdef _pwr10,Pwr10
- xdef _expo10,Expo10
-
- xref _MathIeeeDoubBasBase
-
- i3edpMul = -78
- i3edpDiv = -84
-
- _pwr10: ; integer-Stackparameter
- move.l 4(a7),d0
- movem.l d2-d3/a6,-(a7)
- move.w d0,d2
- bsr.b Pwr10
- movem.l (a7)+,d2-d3/a6
- rts
-
- Pwr10: ; Potenz d2.w
- move.l _MathIeeeDoubBasBase,a6
- tst.w d2
- bpl.b lpwt1
- neg.l d2
- cmp.w #308,d2
- bls.b lpwt0
- moveq #0,d0 ; 10^d2 < MinReal
- moveq #0,d1
- rts
- lpwt0 bsr.b lpwt1
- move.l d0,d2
- move.l d1,d3
- move.l #$3FF00000,d0
- moveq #0,d1
- jsr i3edpDiv(a6)
- rts
-
- lpwt1 cmp.w #308,d2
- bhs.b lpwt4
- cmp.w #10,d2
- bls.b lpwt2
- move.w d2,-(a7)
- lsr.w #1,d2
- bsr.b Pwr10
- move.l d0,d2
- move.l d1,d3
- jsr i3edpMul(a6)
- move.w (a7)+,d2
- btst #0,d2
- beq.b lpwt3
- move.l DoubPwr10tab+8(pc),d2
- move.l DoubPwr10tab+12(pc),d3
- jmp i3edpMul(a6)
- lpwt2 ; 0 <= d2 <= 10
- asl.w #3,d2
- move.l DoubPwr10tab(pc,d2.w),d0
- move.l DoubPwr10tab+4(pc,d2.w),d1
- lpwt3 rts
- lpwt4 moveq #0,d0
- move.l d0,d1
- rts
- DoubPwr10tab:
- dc.l $3FF00000,0 ; 1
- dc.l $40240000,0 ; 10
- dc.l $40590000,0 ; 100
- dc.l $408F4000,0 ; 1000
- dc.l $40C38800,0 ; 10^4
- dc.l $40F86A00,0 ; 10^5
- dc.l $412E8480,0 ; 10^6
- dc.l $416312D0,0 ; 10^7
- dc.l $4197D784,0 ; 10^8
- dc.l $41CDCD65,0 ; 10^9
- dc.l $4202A05F,$20000000; 10^10
-
-
- _expo10:
- movem.l d2-d4/a6,-(a7)
- movem.l 4*4+4(a7),d0/d1
- bsr.b Expo10
- move.l d4,d0
- movem.l (a7)+,d2-d4/a6
- rts
-
- Expo10: ; von d0||d1 nach d4
- moveq #0,d4
- bclr #31,d0
- cmp.l #$000FFFFF,d0
- bls.b dexp9
- movem.l d0-d3/a0-a1,-(a7)
- cmp.l #$3FF00000,d0
- bhs.b dexp3
- dexp1 ; Zahl <1
- subq.l #1,d4
- move.l d4,d2
- bsr Pwr10
- tst.l d0
- beq.b dexp0
- sub.l (a7),d0
- bhi.b dexp1a
- blo.b dexp2
- cmp.l 4(a7),d1
- bls.b dexp2
- dexp1a cmp.l #$01500000,d0 ; +21
- bls.b dexp1
- subq.w #5,d4
- bra.b dexp1
- dexp2 movem.l (a7)+,d0-d3/a0-a1
- rts
- dexp0 moveq #0,d4
- bra.b dexp2
-
- dexp3 ; Zahl >= 1
- addq.l #1,d4
- cmp.w #308,d4
- bhs.b dexp2
- move.l d4,d2
- bsr Pwr10
- sub.l (a7),d0
- blo.b dexp3a
- bhi.b dexp4
- cmp.l 4(a7),d1
- bhi.b dexp4
- dexp3a cmp.l #$FED00000,d0 ; -20
- bgt.b dexp3
- addq.w #5,d4
- cmp.l #$FAF00000,d0 ; -80
- bgt.b dexp3
- addq.w #6,d4
- bra.b dexp3
- dexp4 subq.l #1,d4
- bra.b dexp2
- dexp9 rts
-
- end
-
-