Mathe: Trigonometrie

:!: Die in der VisualBasic Hilfe und vielen Webseiten angegebenen Formeln zur Berechnung der Funktionen ArcSec ArcCsc ArcCot sind
falsch, und andere sind mathematisch schlecht gelöst.




;===============================================================================
;===============================================================================
;===============================================================================
;-------------------------------------------------------------------------------
 
 
 
;===============================================================================
comment * ----------------------------------------------------------------------
 
Infos:
-------
 
 
------------------------------------------------------------------------------ *
 
;Funktionen:
;
;Sinus                      Sin(X)
;Cosinus                    Cos(X)
;Tangens                    Tan(X)
;
;SinusCosinus               SinCos(X, Y) = Sin(X), Cos(Y)
;
;Sekans                     Sec(X) = 1 / Cos(X)
;Kosekans                   Csc(X) = 1 / Sin(X)
;Kotangens                  Cot(X) = 1 / Tan(X)
;
;Arkus Sinus                ASin(X) = ATan(X / Sqr(1 - (X ^ 2)))
;Arkus Kosinus              ACos(X) = ATan(Sqr(1 - (X ^ 2)) / X)
;Arkus Tangens              ATan(X) = ATan(X)
;
;Arkus Sekans               ASec(X) = ATan(Sqr((X ^ 2) - 1))
;Arkus Kosekans             ACsc(X) = ATan(1 / Sqr((X ^ 2) - 1))
;Arkus Kotangens            ACot(X) = ATan(1 / X)
;
;Hyperb. Sinus              SinH(X) = (Exp(X) - Exp(-X)) / 2
;Hyperb. Kosinus            CosH(X) = (Exp(X) + Exp(-X)) / 2
;Hyperb. Tangens            TanH(X) = (Exp(X) - Exp(-X)) / (Exp(X) + Exp(-X))
;
;Hyperb. Sekans             SecH(X) = 2 / (Exp(X) + Exp(-X))
;Hyperb. Kosekans           CscH(X) = 2 / (Exp(X) - Exp(-X))
;Hyperb. Kotangens          CotH(X) = (Exp(X) + Exp(-X)) / (Exp(X) - Exp(-X))
;
;Hyperb. Arkus Sinus        ASinH(X) = Log(X + Sqr((X ^ 2) + 1))
;Hyperb. Arkus Kosinus      ACosH(X) = Log(X + Sqr((X ^ 2) - 1))
;Hyperb. Arkus Tangens      ATanH(X) = Log((1 + X) / (1 - X)) / 2
;
;Hyperb. Arkus Sekans       ASecH(X) = Log((Sqr((X ^ 2) - 1) + 1) / X)
;Hyperb. Arkus Kosekans     ACscH(X) = Log((Sgn(X) * Sqr((X ^ 2) + 1) + 1) / X)
;Hyperb. Arkus Kotangens    ACotH(X) = Log((X + 1) / (X - 1)) / 2
;
;Logarithmus zur Basis N    LogN(X, N) = Log(X) / Log(N)
 
  ;FLDL2E ;1.44270
  ;FLDL2T ;3.32193
  ;FLDLN2 ;0.69315
  ;FLDLG2 ;0.30103
 
 
;-------------------------------------------------------------------------------
;===============================================================================
 
 
 
;===============================================================================
;======= Code-Deklaration
;-------------------------------------------------------------------------------
 
.386                          ; Minimal Anforderung an Prozessor
;.486                          ; Minimal Anforderung an Prozessor
;.586                          ; Minimal Anforderung an Prozessor
;.model flat, stdcall          ; Flat-Memory Modell 32Bit
option casemap :none          ; Case-Sensitive
 
 
 
 
 
;===============================================================================
;======= Includes von Externen Prozessen und APIs
;-------------------------------------------------------------------------------
 
 
 
 
 
;===============================================================================
;======= Public-Deklaration von Prozessen die Extern sichtbar sind
;-------------------------------------------------------------------------------
 
 
 
 
 
;===============================================================================
;======= Daten-Deklarationen
;-------------------------------------------------------------------------------
.data                         ; Daten-Block Beginn
 
 
 
 
 
;===============================================================================
;===============================================================================
;===============================================================================
;======= Code-Beginn
;-------------------------------------------------------------------------------
 
.code                         ; Code-Block Begin
 
 
 
 
;===============================================================================
;======= Proceduren für den Code
;-------------------------------------------------------------------------------
 
 
 
;-------------------------------------------------------------------------------
 
 
 
 
;-------------------------------------------------------------------------------
;Sin Cos Tan
 
Test_FpuTrig_Sin PROC Public Val1:TBYTE
;=== Sinus
;=== ST0 = Sin(Val1)
  FLD       Val1          ; -> ST0 = Val1
 
    FSIN                    ; -- ST0 = Sin(Val1)
 
  FWAIT
  RET
Test_FpuTrig_Sin ENDP
 
Test_FpuTrig_Cos PROC Public Val1:TBYTE
;=== CoSinus
;=== ST0 = Cos(Val1)
  FLD       Val1          ; -> ST0 = Val1
 
    FCOS                    ; -- ST0 = Cos(Val1)
 
  FWAIT
  RET
Test_FpuTrig_Cos ENDP
 
Test_FpuTrig_Tan PROC Public Val1:TBYTE
;=== Tangens
;=== ST0 = Tan(Val1)
  FLD       Val1          ; -> ST0 = Val1
 
    FPTAN                   ; -> ST0 = 1 , ST1 = Tan(Val1)  ACHTUNG: das Resultat steht in ST1 nicht ST0
    FSTP      ST(0)         ; <- ST0 = ST1
 
  FWAIT
  RET
Test_FpuTrig_Tan ENDP
 
 
 
Test_FpuTrig_SinCos PROC Public Val1:TBYTE
;=== Sinus, CoSinus
;=== ST0 = Cos(Val1) , ST1 = Sin(Val1)
  FLD       Val1          ; -> ST0 = Val1
 
    FSINCOS                 ; -> ST0 = Cos(Val1) ,  ST1 = Sin(Val1)
 
  FWAIT
  RET
Test_FpuTrig_SinCos ENDP
 
 
 
 
;-------------------------------------------------------------------------------
;Sek Csc Cot
 
Test_FpuTrig_Sec PROC Public Val1:TBYTE
;=== Sekans
;=== ST0 = 1 / Cos(Val1)
  FLD       Val1          ; -> ST0 = Val1
 
    FCOS                    ; -- ST0 = Cos(Val1)
    FLD1                    ; -> ST0 = 1 , ST1=Cos(Val1)
    FDIVRP ST(1), ST        ; <- ST0 = ST0 / ST1
 
;FIXME Sec = 1 / Cos -&gt; Cos(Val1) &lt;&gt; 0!
 
  FWAIT
  RET
Test_FpuTrig_Sec ENDP
 
Test_FpuTrig_Csc PROC Public Val1:TBYTE
;=== CoSekans
;=== ST0 = 1 / Sin(Val1)
  FLD       Val1          ; -> ST0 = Val1
 
    FSIN                    ; -- ST0 = Sin(Val1)
    FLD1                    ; -> ST0 = 1 , ST1=Sin(Val1)
    FDIVRP ST(1), ST        ; <- ST0 = ST0 / ST1
 
  FWAIT
  RET
Test_FpuTrig_Csc ENDP
 
Test_FpuTrig_Cot PROC Public Val1:TBYTE
;=== CoTangens
;=== ST0 = 1 / Tan(Val1)
  FLD       Val1          ; -> ST0 = Val1, ST1=1
 
    FPTAN                   ; -> ST0 = 1 , ST1 = Tan(Val1)  ACHTUNG: das Resultat Tan() steht in ST1, nicht ST0
    FDIVRP ST(1), ST        ; <- ST0 = ST0 / ST1
 
;FIXME Geschwindigkeits-Check
    ;FSINCOS
    ;FDIVRP ST(1), ST        ; <- ST0 = ST0 / ST1
 
  FWAIT
  RET
Test_FpuTrig_Cot ENDP
 
 
 
 
;-------------------------------------------------------------------------------
;Transcendental
 
;ASin ACos ATan
 
Test_FpuTrig_ArcSin PROC Public Val1:TBYTE
;=== Arkus-Sinus
;=== ST0 = ATan(Val1 / Sqr(1 - (Val1 ^ 2)))
  FLD       Val1          ; -> ST0 = Val1
 
    FLD       ST(0)         ; -> ST0 = Val1, ST1=Val1
    FMUL      ST, ST(0)     ; -- ST0 = Val1 * Val1 , ST1=Val1   [X ^ 2]
    FLD1                    ; -> ST0 = 1 , ST1=Val1*Val1 , ST2=Val1
    FSUBRP    ST(1), ST     ; <- ST0 = ST0 - ST1 , ST1=Val1   [1 - X ^ 2]
    FSQRT                   ; -- ST0 = SQR(ST0) , ST1=Val1   [Sqr(1 - X ^ 2)]
    FPATAN                  ; <- ST0 = ATan(ST1 / ST0)   [ATan(Val1 / Sqr(1 - (Val1 ^ 2)))]
 
  FWAIT
  RET
Test_FpuTrig_ArcSin ENDP
 
Test_FpuTrig_ArcCos PROC Public Val1:TBYTE
;=== Arkus-CoSinus
;=== ST0 = ATan(Sqr(1 - (Val1 ^ 2)) / Val1)
  FLD       Val1          ; -> ST0 = Val1
 
    FLD       ST(0)         ; -> ST0 = Val1, ST1=Val1
    FMUL      ST, ST(0)     ; -- ST0 = Val1 * Val1 , ST1=Val1  [X * X]
    FLD1                    ; -> ST0 = 1 , ST1=Val1*Val1 , ST2=Val1
    FSUBRP    ST(1), ST     ; <- ST0 = ST0 - ST1 , ST2=Val1   [1 - X * X]
    FSQRT                   ; -- ST0 = SQR(ST0) , ST1=Val1
    FXCH                    ; -- ST0 <=> ST1
    FPATAN                  ; <- ST0 = ATan(ST1 / ST0)
 
  FWAIT
  RET
Test_FpuTrig_ArcCos ENDP
 
Test_FpuTrig_ArcTan PROC Public Val1:TBYTE
;=== Arcus-Tangens
;=== ST0 = ATAN(Val1)
  FLD       Val1          ; -> ST0 = Val1
 
    FLD1                    ; -> ST0 = 1 , ST1 = Val1
    FPATAN                  ; <- ST0 = ATAN(ST1 / ST0)
 
  FWAIT
  RET
Test_FpuTrig_ArcTan ENDP
 
 
 
Test_FpuTrig_ArcTan2 PROC Public Val1:TBYTE, Val2:TBYTE
;=== Arcus-Tangens-XY
;=== ST0 = ATan(Val2 / Val1)
  FLD       Val2          ; -> ST0 = Val2
  FLD       Val1          ; -> ST0 = Val1 , ST1=Val2
 
    FPATAN                  ; <- ST0 = ATAN(ST1 / ST0)
 
  FWAIT
  RET
Test_FpuTrig_ArcTan2 ENDP
 
 
 
 
 
;-------------------------------------------------------------------------------
;ASek ACsc ACot
 
Test_FpuTrig_ArcSec PROC Public Val1:TBYTE
;=== Arkus-Sekans
;=== ST0 = ArcTan(Sqr((Val1 ^ 2) - 1))
  FLD       Val1          ; -> ST0 = Val1
 
    FMUL      ST, ST(0)     ; -- ST0 = Val1   [Val1 ^ 2]
    FLD1                    ; -> ST0 = 1 , ST1=Val1*Val1
    FSUBP     ST(1), ST     ; <- ST0 = ST1 - ST0   [Val1 ^ 2 - 1]
    FSQRT                   ; -- ST0 = SQR(ST0)    [Sqr((Val1 ^ 2) - 1)]
    FLD1                    ; -> ST0 = 1 , ST1=ST1
    FPATAN                  ; <- ST0 = ATan(ST1 / ST0)
 
  FWAIT
  RET
Test_FpuTrig_ArcSec ENDP
 
Test_FpuTrig_ArcCsc PROC Public Val1:TBYTE
;=== Arkus-KoSekans
;=== ST0 = ArcTan(Sqr((1 / (Val1 ^ 2)) - 1))
  FLD       Val1          ; -> ST0 = Val1
 
    FMUL      ST, ST(0)     ; -- ST0 = Val1   [Val1 ^ 2]
    FLD1                    ; -> ST0 = 1 , ST1=Val1*Val1
    FSUBP     ST(1), ST     ; <- ST0 = ST1 - ST0   [Val1 ^ 2 - 1]
    FLD1                    ; -> ST0 = 1 , ST1=Val1*Val1
    FDIVRP     ST(1), ST     ; <- ST0 = ST1 / ST0
    FSQRT                   ; -- ST0 = SQR(ST0)    [Sqr((1 / (Val1 ^ 2)) - 1)]
    FLD1                    ; -> ST0 = 1 , ST1=ST1
    FPATAN                  ; <- ST0 = ATan(ST1 / ST0)
 
  FWAIT
  RET
Test_FpuTrig_ArcCsc ENDP
 
Test_FpuTrig_ArcCot PROC Public Val1:TBYTE
;=== Arkus-KoTangens
;=== ST0 = ArcTan(1 / Val1)
  FLD       Val1          ; -> ST0 = Val1
 
    FLD1                    ; -> ST0 = 1 , ST1 = Val1
    FXCH                    ; -- ST0 <=> ST1
    FPATAN                  ; <- ST0 = ATAN(ST1 / ST0)
 
  FWAIT
  RET
Test_FpuTrig_ArcCot ENDP
 
 
 
 
 
;-------------------------------------------------------------------------------
;Hyperbolic
 
;SinH CosH TanH
 
Test_FpuTrig_HypSin PROC Public Val1:TBYTE
;=== Sinus-Hyperberbolikus
;=== ST0 = (Exp(X) - Exp(-X)) / 2
  FLD       Val1          ; -> ST0 = Val1
 
   ;- Exp(X)
    FLDL2E
    FMULP     ST(1), ST
 
    FSTCW     ControlWW
    FLDCW     RoundDown
 
    FLD       ST(0)
    FRNDINT
    FLDCW     ControlWW   ;[EBP-8]
    FXCH
    FSUB      ST, ST(1)
    F2XM1
    FLD1
    FADDP     ST(1), ST
    FSCALE
 
   ;-
    FST       ST(1)
    FLD1
    FDIVRP    ST(1), ST
    FSUBP     ST(1), ST      ; -
    ;FLD       OneHalf       ;Variante 1
    ;FMULP     ST(1), ST
    FIDIV     ValInt_2       ;Variante 2
    ;FLD1                    ;Variante 3
    ;FADD      ST, ST(0)
    ;FDIVP     ST(1), ST
 
comment *
sinh:
    FYL2X
    FLD ST(0)
    FRNDINT
 
    FSUB ST(1), ST(0)
    FLD1
    FSCALE
    FXCH
    FXCH ST(2)
    F2XM1
    FLD1
    FADDP ST(1), ST(0)
    FMULP ST(1), ST(0)
    FSTP ST(1)
 
    FLD ST(0)
    FLD1
    FDIVRP ST(1),ST(0)
    FSUBP ST(1),ST(0)         ; -
    FLD TWORD [RX_HALF]
    FMULP ST(1),ST(0)
*
 
  FWAIT
  RET
Test_FpuTrig_HypSin ENDP
 
Test_FpuTrig_HypCos PROC Public Val1:TBYTE
;=== KoSinus-Hyperberbolikus ;
;=== ST(0) = (Exp(X) + Exp(-X)) / 2
  FLD       Val1          ; -> ST(0) = Val1
 
   ;- Exp(X)
    FLDL2E
    FMULP     ST(1), ST
 
    FSTCW     ControlWW
    FLDCW     RoundDown
 
    FLD       ST(0)
    FRNDINT
    FLDCW     ControlWW   ;[EBP-8]
    FXCH
    FSUB      ST, ST(1)
    F2XM1
    FLD1
    FADDP     ST(1), ST
    FSCALE
 
   ;-
    FST       ST(1)
    FLD1
    FDIVRP    ST(1), ST
    FADDP     ST(1), ST       ; +
    ;FLD       OneHalf
    ;FMULP     ST(1), ST
    FIDIV     ValInt_2
    ;FLD1
    ;FADD      ST, ST(0)
    ;FDIVP     ST(1), ST
 
comment *
cosh:
    FYL2X
    FLD ST(0)
    FRNDINT
 
    FSUB ST(1), ST(0)
    FLD1
    FSCALE
    FXCH
    FXCH ST(2)
    F2XM1
    FLD1
    FADDP ST(1), ST(0)
    FMULP ST(1), ST(0)
    FSTP ST(1)
 
    FLD ST(0)
    FLD1
    FDIVRP ST(1),ST(0)
    FADDP ST(1),ST(0)         ; +
    FLD TWORD [RX_HALF]
    FMULP ST(1),ST(0)
*
 
  FWAIT
  RET
Test_FpuTrig_HypCos ENDP
 
Test_FpuTrig_HypTan PROC Public Val1:TBYTE
;=== Tangens-Hyperberbolikus ;
;=== ST(0) = (Exp(X) - Exp(-X)) / (Exp(X) + Exp(-X))
  FLD       Val1          ; -> ST(0) = Val1
 
   ;- Exp(X)
    FLDL2E
    FMULP     ST(1), ST
 
    FSTCW     ControlWW
    FLDCW     RoundDown
 
    FLD       ST(0)
    FRNDINT
    FLDCW     ControlWW   ;[EBP-8]
    FXCH
    FSUB      ST, ST(1)
    F2XM1
    FLD1
    FADDP     ST(1), ST
    FSCALE
 
   ;-
    FST       ST(1)
    FMUL  ST(0),ST(0)
    FLD   ST(0)
    FLD1
    FADDP ST(1),ST(0)
    FXCH
    FLD1
    FSUBP ST(1),ST(0)
    FDIVRP ST(1),ST(0)
 
 
 
comment *
   ;-  cosh
    FST       ST(1)
    FLD1
    FDIVRP    ST(1), ST
    FADDP     ST(1), ST       ; +
    FIDIV     ValInt_2
 
 
cosh:
    FLD ST(0)
    FLD1
    FDIVRP ST(1),ST(0)
    FADDP ST(1),ST(0)         ; - +
    FIDIV     ValInt_2
 
tanh:
    FMUL  ST(0),ST(0)
    FLD   ST(0)
    FLD1
    FADDP ST(1),ST(0)
    FXCH
    FLD1
    FSUBP ST(1),ST(0)
    FDIVRP ST(1),ST(0)
*
 
 
 
 
comment *
tanh:
    FYL2X
    FLD ST(0)
    FRNDINT
 
    FSUB ST(1), ST(0)
    FLD1
    FSCALE
    FXCH
    FXCH ST(2)
    F2XM1
    FLD1
    FADDP ST(1), ST(0)
    FMULP ST(1), ST(0)
    FSTP ST(1)
 
    FMUL  ST(0),ST(0)
    FLD   ST(0)
    FLD1
    FADDP ST(1),ST(0)
    FXCH
    FLD1
    FSUBP ST(1),ST(0)
    FDIVRP ST(1),ST(0)
 
 
 
cosh:
    FLD ST(0)
    FLD1
    FDIVRP ST(1),ST(0)
    FADDP ST(1),ST(0)         ; +
    FLD TWORD [RX_HALF]
    FMULP ST(1),ST(0)
 
tanh:
    FMUL  ST(0),ST(0)
    FLD   ST(0)
    FLD1
    FADDP ST(1),ST(0)
    FXCH
    FLD1
    FSUBP ST(1),ST(0)
    FDIVRP ST(1),ST(0)
*
 
  FWAIT
  RET
Test_FpuTrig_HypTan ENDP
 
 
 
 
 
;-------------------------------------------------------------------------------
;SekH CscH CotH
 
Test_FpuTrig_HypSec PROC Public Val1:TBYTE
;=== Sekans-Hyperberbolikus ;
;=== ST0 = 2 / (Exp(X) + Exp(-X))
  FLD       Val1          ; -> ST0 = Val1
 
;WRITEME
FSTP ST(0)
FLDZ
 
  FWAIT
  RET
Test_FpuTrig_HypSec ENDP
 
Test_FpuTrig_HypCsc PROC Public Val1:TBYTE
;=== KoSekans-Hyperberbolikus ;
;=== ST0 = 2 / (Exp(X) - Exp(-X))
 
  FLD       Val1          ; -> ST0 = Val1
 
;WRITEME
FSTP ST(0)
FLDZ
 
  FWAIT
  RET
Test_FpuTrig_HypCsc ENDP
 
Test_FpuTrig_HypCot PROC Public Val1:TBYTE
;=== KoTangens-Hyperberbolikus
;=== ST0 = (Exp(X) + Exp(-X)) / (Exp(X) - Exp(-X))
  FLD       Val1          ; -> ST0 = Val1
 
;WRITEME
FSTP ST(0)
FLDZ
 
  FWAIT
  RET
Test_FpuTrig_HypCot ENDP
 
 
 
 
 
;-------------------------------------------------------------------------------
;Arcus Hyperbolic
 
;ASinH ACosH ATanH
 
 
Test_FpuTrig_HypArcSin PROC Public Val1:TBYTE
;=== Arkus-Sinus-Hyperberbolikus
;=== ST0 = Log(Val1 + Sqr(Val1 ^ 2 + 1))
  ;FLDLN2
  FLD       Val1          ; -> ST0 = Val1
 
    FLD       ST(0)         ; -> ST0 = Val1, ST1=Val1
    FMUL      ST, ST(0)     ; -- ST0 = Val1 * Val1 , ST1=Val1   [X ^ 2]
    FLD1                    ; -> ST0 = 1 , ST1=Val1*Val1 , ST2=Val1
    FADDP     ST(1), ST     ; <- ST0 = ST1 + ST0 , ST1=Val1   [X ^ 2 + 1]
 
    FSQRT                   ; -- ST0 = SQR(ST0) , ST1=Val1   [Sqr(X ^ 2 + 1))]
    FADDP     ST(1), ST     ; <- ST0 = ST1 + ST0   [X + Sqr(X ^ 2 + 1)]
 
    FLDLN2                  ; -> ST0 = LogE(2) , ST1=ST0
    FXCH                    ; -- ST0 <=> ST1
    FYL2X                   ; <- ST0 = Log2(ST0) * ST1(FLDLN2)   [Log(X + Sqr(X ^ 2 + 1))]
 
  FWAIT
  RET
Test_FpuTrig_HypArcSin ENDP
 
Test_FpuTrig_HypArcCos PROC Public Val1:TBYTE
;=== Arkus-KoSinus-Hyperberbolikus
;=== ST0 = Log(Val1 + Sqr((Val1 ^ 2) - 1))
  ;FLDLN2
  FLD       Val1          ; -> ST0 = Val1
 
    FLD       ST(0)         ; -> ST0 = Val1, ST1=Val1
    FMUL      ST, ST(0)     ; -- ST0 = Val1 * Val1 , ST1=Val1   [X ^ 2]
    FLD1                    ; -> ST0 = 1 , ST1=Val1*Val1 , ST2=Val1
    FSUBP     ST(1), ST     ; <- ST0 = ST1 + ST0 , ST1=Val1   [X ^ 2 - 1]
 
    FSQRT                   ; -- ST0 = SQR(ST0) , ST1=Val1   [Sqr(X ^ 2 + 1))]
    FADDP     ST(1), ST     ; <- ST0 = ST1 + ST0   [X + Sqr(X ^ 2 + 1)]
 
    FLDLN2                  ; -> ST0 = LogE(2) , ST1=ST0
    FXCH                    ; -- ST0 <=> ST1
    FYL2X                   ; <- ST0 = Log2(ST0) * ST1(FLDLN2)   [Log(X + Sqr(X ^ 2 + 1))]
 
  FWAIT
  RET
Test_FpuTrig_HypArcCos ENDP
 
Test_FpuTrig_HypArcTan PROC Public Val1:TBYTE
;=== Arkus-Tangens-Hyperberbolikus
;=== ST0 = Log((1 + Val1) / (1 - Val1)) / 2
  ;FLDLN2
  FLD       Val1          ; -> ST0 = Val1
 
    FLD       ST(0)         ; -> ST0 = Val1, ST1=Val1
    FLD1                    ; -> ST0 = 1 , ST1=Val1 , ST2=Val1
 
    FADD      ST(2), ST     ; -- ST0=1 , ST1=Val1 , ST2 = Val1 + 1
    FSUBRP    ST(1), ST     ; <- ST1 = 1 - Val1 , ST2=Val1 + 1
 
    ;...
    FDIVP     ST(1), ST     ; <- ST0 = (Val1 + 1) / (1 - Val1)
 
    FLDLN2                  ; -> ST0 = LogE(2) , ST1=ST0
    FXCH                    ; -- ST0 <=> ST1
    FYL2X                   ; <- ST0 = Log2(ST0) * ST1[FLDLN2]
 
    FLD1                    ; -> ST0 = 1 , ST1=Log((1 + Val1) / (1 - Val1))
    FADD      ST, ST(0)     ; -> ST0 = ST0 + 1 , ST1=ST1
    FDIVP     ST(1), ST     ; <- ST0 = Log((1 + Val1) / (1 - Val1)) / 2
 
 
    ;... Geschwindigkeits-Check
    ;FDIVP   ST(1), ST
    ;
    ;FSQRT
    ;FYL2X
 
  FWAIT
  RET
Test_FpuTrig_HypArcTan ENDP
 
 
 
 
 
;-------------------------------------------------------------------------------
;ASekH ACscH ACotH
 
Test_FpuTrig_HypArcSec PROC Public Val1:TBYTE
;=== Arkus-Sekans-Hyperberbolikus
;=== ST0 = Log((Sqr(1 - (Val1 ^ 2)) + 1) / Val1)
  FLD       Val1          ; -> ST0 = Val1
 
;WRITEME
FSTP ST(0)
FLDZ
 
  FWAIT
  RET
Test_FpuTrig_HypArcSec ENDP
 
Test_FpuTrig_HypArcCsc PROC Public Val1:TBYTE
;=== Arkus-KoSekans-Hyperberbolikus
;=== ST0 = Log((Sgn(Val1) * Sqr(Val1 ^ 2 + 1) + 1) / Val1)
  FLD       Val1          ; -> ST0 = Val1
 
;WRITEME
FSTP ST(0)
FLDZ
 
  FWAIT
  RET
Test_FpuTrig_HypArcCsc ENDP
 
Test_FpuTrig_HypArcCot PROC Public Val1:TBYTE
;=== Arkus-KoTangens-Hyperberbolikus
;=== ST0 = Log((Val1 + 1) / (Val1 - 1)) / 2
  FLD       Val1          ; -> ST0 = Val1
 
;WRITEME
FSTP ST(0)
FLDZ
 
  FWAIT
  RET
Test_FpuTrig_HypArcCot ENDP
 
 
 
 
;-------------------------------------------------------------------------------
;===============================================================================
;===============================================================================

Runtime/Mathe-Trigonometrie.txt · Zuletzt geändert: 2010/08/11 20:22 (Externe Bearbeitung)