Advertisement
nobs

sincos

Jun 20th, 2022 (edited)
959
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.19 KB | None | 0 0
  1. /**
  2.  * sincos.c
  3.  *
  4.  * Demo für sincos direkt auf einer x86 FPU,
  5.  *
  6.  * gcc sincos.c
  7.  *
  8.  * $ ./a.out
  9.  * .4
  10.  * sincos(0.40000000000000002) -> sin: 0.38941834230865052 cos: 0.92106099400288510
  11.  *
  12.  */
  13.  
  14. #include <stdio.h>
  15.  
  16. void static inline X86FpuSincos(double *a, double *y, double *x){
  17.         asm ("fldl %[a] \n\t"                   // Winkel auf den Register-Stack der FPU
  18.         "fsincos        \n\t"                   // sin und cos mit einem Befehl in der FPU erzeugen
  19.         "fstpl %[x]     \n\t"                   // Kosinus aus der FPU in die Variable schreiben
  20.         "fstpl %[y]"                            // Sinus aus der FPU in die Variable schreiben
  21.         :[x] "=m" (*x) , [y] "=m" (*y)          // x und y im Assembler als Ausgabe definieren
  22.         :[a] "m" (*a)                           // a im Assembler als Eingabe definieren
  23.         );
  24. }
  25.  
  26. int main(){
  27.         double y;       // Sinus
  28.         double x;       // Kosinus
  29.         double a;       // Winkel
  30.  
  31.         scanf ("%lf", &a);                      // Winkel einlesen
  32.  
  33.         X86FpuSincos (&a, &y, &x);
  34.  
  35.         printf ("sincos(%.17lf) -> sin: %.17lf cos: %.17lf\n", a, y, x);        // alles ausgeben
  36. }
  37.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement