DD3AH icon

sincos

DD3AH | PRO | 08/14/23 03:12:19 PM UTC (Edited) | 0 ⭐ | 1850 👁️ | Never ⏰ | []
C |

1.19 KB

|

None

|

0 👍

/

0 👎

/**
 * sincos.c 
 *
 * Demo für sincos direkt auf einer x86 FPU,
 *
 * gcc sincos.c
 *
 * $ ./a.out
 * .4
 * sincos(0.40000000000000002) -> sin: 0.38941834230865052 cos: 0.92106099400288510
 *
 */
 
#include <stdio.h>
 
void static inline X86FpuSincos(double *a, double *y, double *x){
        asm ("fldl %[a] \n\t"                   // Winkel auf den Register-Stack der FPU
        "fsincos        \n\t"                   // sin und cos mit einem Befehl in der FPU erzeugen
        "fstpl %[x]     \n\t"                   // Kosinus aus der FPU in die Variable schreiben
        "fstpl %[y]"                            // Sinus aus der FPU in die Variable schreiben
        :[x] "=m" (*x) , [y] "=m" (*y)          // x und y im Assembler als Ausgabe definieren
        :[a] "m" (*a)                           // a im Assembler als Eingabe definieren
        );
}
 
int main(){
        double y;       // Sinus
        double x;       // Kosinus
        double a;       // Winkel
 
        scanf ("%lf", &a);                      // Winkel einlesen
 
        X86FpuSincos (&a, &y, &x);
 
        printf ("sincos(%.17lf) -> sin: %.17lf cos: %.17lf\n", a, y, x);        // alles ausgeben
}
 

Comments

  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎