rechnen in c

Gast #4442907
Lesenswert?
• ▲
▼
Hallo zusammen,
ich versteh den Fehler nicht. Ich möchte auf einem PIC32 
Gleitkommazahlen multiplizieren und bekomme unterschiedliche Ergebnisse 
für


long double a = 0.0012..........;
long double b = 0.000123........;
long double ahalb = a/2;

long double sinus1 = sin(ahalb);
long double sinus2 = sin(a/2);

sinus1 liefert den richtigen wert, sinus2 nicht.
Wo ist das Problem?
Gast #4442919
Lesenswert?
• ▲
▼
Sprache ist C (XC32 Compiler), die Werte kann ich dir leider nicht 
sagen(vermutlich 0 für sinus2), weil das Ergebnis die Komponenten einer 
Matrix bilden, und nach der Multiplikation mit einem Vektor für den 
Fall, dass ich sinus2 verwende immer der 0-Vektor rauskommt, im Fall 
sinus1 jedoch der richtige.
Es ist durchaus möglich, dass andere Fehler im Programm sind (die 
Rechnung geht ja noch weiter), jedoch bringt die Verwendung von sinus1 
eine 100% Verbesserung und ich verstehe nicht, warum.
Gast #4442920
Lesenswert?
• ▲
▼
Das klingt doch stark nach einem anderen Problem im Programm. Lass dir 
sinus1/2 mal direkt auf den PC ausgeben (printf o.ä.). Vielleicht auch 
ein später auftretender Speicherfehler mit wilden Pointern oder so...
#4442926
Lesenswert?
• ▲
▼
nichtgerne schrieb:
> Es ist durchaus möglich, dass andere Fehler im Programm sind (die
> Rechnung geht ja noch weiter), jedoch bringt die Verwendung von sinus1
> eine 100% Verbesserung und ich verstehe nicht, warum.

Ob nun a/2 zuerst in einer Variable gespeichert wird oder nicht, sollte 
keine Rolle spielen. Der Compiler wird das höchstwahrscheinlich so oder 
so optimieren, so dass schlussendlich der gleiche Code generiert wird. 
Ich vermute, der Fehler liegt an einer anderen Stelle.

Beachte, dass die Funktion sin in C als Argument einen double erwartet 
und auch einen solchen zurückliefert.
#4442955
Lesenswert?
• ▲
▼
nichtgerne schrieb:
> Ich hatte nur gehofft, dass mir irgendein (für andere) offensichtlicher
> Fehler unterlaufen ist.

Wie oben schon bemerkt, passt die Verwendung vom Datentyp long double 
nicht mit der Verwendung der Funktion sin() zusammen.

Die generelle Korrektheit solcher Berechnungen kann man gut am PC 
prüfen. Hier kann man Zwischenergebnisse sehr einfach an der Konsole 
oder in einer Datei ausgeben.

Wahrscheinlich liegt der Fehler an einer anderen Stelle im Code.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.