String rundet



  • Moin. habe ein kleines Problem

    möchte einen wert auslesen und ihn weiter bearbeiten jedoch wird dieser gerundet.

    double alterwert=9.9999999999999995e-008;

    QString wertneu=QString( "%1" ).arg(alterwert,0), 1, 'f',20);

    ermacht draus 0.00000010000000000000



  • Das Problem ist, dass dein Wert nicht exakt in double darstellbar ist. Das Problem liegt also nicht an QString sondern an double 😉



  • hmm und wie kann ich es anpassen?



  • Dein Code ist falsch. Es ist eine schließende Klammer zu viel und vieles verstehe ich vielleicht aus dem selben Grund nicht.



  • indem du dir eine Klasse schreibst (bzw eine existierende nimmst), die die Zahl als Bruch darstellt (zB mit boost rational).
    Eine Alternative wäre, eine Fließkommazahlklasse zu benutzen, die eine höhere Genauigkeit hat (zB GMP)



  • Mich interessiert das auch mit der höheren Genauigkeit.

    Mit wie starken Geschwindigkeitseinbußen muss man rechnen (z.B. bei GMP) im vergleich zu double?

    Es geht mir natürlich nur um eine grobe Einschätzung also sowas wie

    ~faktor 2
    ~faktor 100
    ~faktor 1000

    oder so



  • Q schrieb:

    Mich interessiert das auch mit der höheren Genauigkeit.

    Mit wie starken Geschwindigkeitseinbußen muss man rechnen (z.B. bei GMP) im vergleich zu double?

    Es geht mir natürlich nur um eine grobe Einschätzung also sowas wie

    ~faktor 2
    ~faktor 100
    ~faktor 1000

    oder so

    Kommt auf die Menge des Speicherplatzes an, die du der Variable zugestehst. GMP ist anscheinend die schnellste Multiple-Precision-Library, und ich vermute, dass die meisten Operationen annähernd linear zur Menge des Speicherplatzes verlaufen. Du wirst aber auf jeden Fall einen höheren Grundaufwand durch Größen-Checks und Allokationen haben, sodass du vielleicht mit Faktoren um 10 oder 100 rechnen musst.

    EDIT: Das Rechnen mit rationalen Zahlen (dort gibt es dann aber kein pow, sondern nur exp und kein sqrt usw.), also nur +-*/% usw. könnte bei GMP etwas schneller, aber vor allem exakter sein.



  • @wxSkip

    ich habe ihn nur vereinfacht und die klammer vergesser, kann ich nicht für

    'f' in long double ändern ?



  • juri23 schrieb:

    @wxSkip

    ich habe ihn nur vereinfacht und die klammer vergesser, kann ich nicht für

    'f' in long double ändern ?

    Ich verstehe weder deinen Code noch deine Aussage. Bitte schreibe den Code richtig aus.


Anmelden zum Antworten