Autor Thema: Turbo C Trigonometrie  (Gelesen 16135 mal)

Neo3

  • Beiträge: 39
    • Profil anzeigen
    • GlobalNetzone
Gespeichert
« Antwort #20 am: 03. June 2006, 15:49 »
Also ich würde meinen das hängt mit dem jeweiligen Compiler zusammen der eine akzeptiert es und der andere wiederum nicht und nach Syntaxt ist das so wie Termite geschreiben hat, bin mir dessen nicht sicher, nehme es aber an.

Freundliche Grüsse
Neo3
Mit grosser Kraft folgt grosse Verantwortung.

C#ris

  • Beiträge: 47
    • Profil anzeigen
    • http://www.xerxys.org
Gespeichert
« Antwort #21 am: 03. June 2006, 16:20 »
Zitat von: Neo3
Also ich würde meinen das hängt mit dem jeweiligen Compiler zusammen der eine akzeptiert es und der andere wiederum nicht und nach Syntaxt ist das so wie Termite geschreiben hat, bin mir dessen nicht sicher, nehme es aber an.

Klar, das hängt ab ob es als C oder C++ Code kompiliert wird und von nix anderem ;) Voraussgesetzt die Compiler halten sich an die Standards.


for(int i = 0;;i++);

wird in keinen C Compiler funktionieren, wie Termite schon richtig gesagt hat.

Vielleicht sollte man den Offtopic-Blödsinn, den ich da angestoßen habe lassen...  :wink:

scales of justice

  • Beiträge: 228
    • Profil anzeigen
Gespeichert
« Antwort #22 am: 03. June 2006, 21:37 »
Zitat
Ihr koenntet euch die Taylor-Reihen einfach selbst herleiten


glaubst du echt, das hätte ich nicht gemacht, wenn ichs könnte?
genau das ist ja das Problem

meine Sinus-Taylorreihe ist auch nur von - 2Pi (- 360°) bis 2Pi (360°), die hab ich aber auch nur hinbekommen, weil ich einfach eine andere abgeschrieben und weitergeführt hab

scales of justice

  • Beiträge: 228
    • Profil anzeigen
Gespeichert
« Antwort #23 am: 05. June 2006, 18:23 »
seht mal was ich in der Turbo C Anleitung gefunden hab:
Q. Why do I get incorrect results from all the math library
    functions like cos() and tan()?
 A. You must #include <math.h> before you call any of the standard
    Turbo C math functions. In general, Turbo C assumes that a function
    that is not declared returns an int. In the case of math functions,
    they usually return a double. For example

        /* WRONG */                       /* RIGHT */
                                          #include <math.h>
        main()                            main()
        {                                 {
          printf("%f", cos(0));             printf("%f", cos(0));
        }                                 }

Azi

  • Beiträge: 47
    • Profil anzeigen
Gespeichert
« Antwort #24 am: 06. June 2006, 19:26 »
Zitat von: scales of justice

oder kann mir aus dieser für Sinus eine für Cosinus machen:

double sinus(double x)
{
  return(x * (1 - x * x / 6 * (1 - x * x / 20 * (1 - x * x / 42 * (1 - x * x / 72 * (1 - x * x / 110 * (1 - x * x / 156 * (1 - x * x / 210 * (1 - x * x / 272)))))))));
}

Da sin(X)^2 + cos(x)^2 = 1 ist, kann man einfach folgendes machen:

double cosinus(double x)
{
 return(1-pow(sinus(x),2))
}

Es gibt 10 Sorten von Menschen: Die einen können binär zählen, die anderen nicht.

Der Vorteil der Klugheit liegt darin, dass man sich dumm stellen kann. Das Gegenteil ist schon schwieriger.

scales of justice

  • Beiträge: 228
    • Profil anzeigen
Gespeichert
« Antwort #25 am: 07. June 2006, 12:23 »
less erst mal alles, bevor du postest

so eine zwischen Lösung hab ich schon,
deine ist nur noch schlechter, da ich erst noch pow implementieren müsste

ich such eine eigenständige Taylorreihe für Cosinus, nicht die 100. Umrechnung von sinus

SK-Genius

  • Beiträge: 8
    • Profil anzeigen
Gespeichert
« Antwort #26 am: 07. June 2006, 13:03 »
ich denk du hast dein fehler mit dem include schon gefunden?

aber wenn es dich wirklich interesiert gibt es hir mal die formel

double sin(double x) {
  double x2 = x*x;
  return x * (1-x2/(2*3) * (1-x2/(4*5) * (1-x2/(6*7) * (1-x2/(8*9) * ... ;
}

double sin(double x) {
  double x2 = x*x;
  return 1-x2/(1*2) * (1-x2/(3*4) * (1-x2/(5*6) * (1-x2/(7*8) * ... ;
}


ich glaub mit 7 gliedern war man schon genau genug für den bereich von 2pi um null. achja, das fehlt übrigens noch, die begrenzung auch den bereich in der die funktionen ausreichend genau arbeiten.


x = x - round(x/(2*PI))*2*PI;


so oder so ähnlich müsste es funktionieren. bersönlich find ich es ziehmlich blödsinnig da ihr hier flieskommazahlenen (double) mit hilfe der fpu berechnen lasst, und dann nicht auf die sinus bzw. cosinus funktionen der fpu zurückgreift.

@Azi:
es fehlt noch das wurzelziehn

 

Einloggen