ungenaue berechnungen mit double werten...



  • hallo,
    ich versuche eine berechnung mit koordinatentransformation zu machen. Als Grundlage nehme ich Daten / die Beschreibung von der Seite www.ottmarlabonde.de

    leider werden mein double werte ungenau und stimmen ab der ca. 3 - 4 Nachkommastelle nicht mehr mit den vorgegebenen Werten überein.

    wie kann ich z.B. mit cout alle nachkommastellen ausgeben lassen?

    welche möglichkeiten gibt es die werte noch genauer / mit mehr nachkommastellen zu berechnen.
    mein PI hat 20 stellen, das müsst eigentlich ausreichen.

    ein anderes problem, was mir evtl. einen Fehler machen könnte wäre die Berechnung mit sinus und cosinus. eine direkte Berechnung über: cos (B) muss in microsoft "visual studio c++ 6.0" so geschrieben werden. cos(B*pi/180.0) wo kann ich das programm von "rad in deg" umstellen?

    was ist eigentlich genauer, ob wenn ich nun (B*pi/180.0) oder (B/180.0*pi) rechne? wieso?

    Ich danke für jede Hilfe

    mfg thorsten



  • #include <iomanip>
    
    double d = 0.123456789;
    std::cout << std::setprecision(x) << d;
    

    Btw ist das im Standard so festgelegt dass die Winkelfunktionen im Bogenmaß rechnen. Am Programm kannst du gar nix umstellen höchsten eine eigene Funktion schreiben





  • Du mußt wohl Deine Winkel aus dem Bogenmaß ins Winkelmaß umrechnen.
    Es gilt ja α/180=t/Pi; mit Bogenmaß t

    Die nach t umgestellte Formel gibst Du ja schon als Argument an die cos-Fkt.

    thorsten1896 schrieb:

    was ist eigentlich genauer, ob wenn ich nun (B*pi/180.0) oder (B/180.0*pi) rechne? wieso?

    Eine Gleitpunktzahl wird als Mantisse, Exponent und Vorzeichen gespeichert. Die Mantisse legt die Genauigkeit fest. Bei einem Float ist das bei der x86-Architektur eine 23Bit-Zahl. Zusätzlich wird die Mantisse normalisiert dargestellt.

    Das bedeutet, kleine Zahlen (Zahlen mit Exponenten nahe 0) können genauer dargestellt werden als Große (Zahlen mit Exponenten viel größer/kleiner 0).

    Es kommt also auf Dein B an.
    Wenn das Zwischenergebnis von B/180 einen Exponenten hat der näher an der 0 ist als B*Pi, dann solltest Du B/180 bevorzugen. Ansonsten B*Pi.

    Noch als Buchtip: Den Aufbau, und die Probleme die er bereitet, findest Du in jedem Buch über Rechnerarchitekturen. Ein sehr gutes ist Computer Organization and Design von David Patterson und John Hennessy


Anmelden zum Antworten