Welcher Datentyp bei so einer grossen Zahl



  • Hallo zusammen,

    ich lese aus einer Datei Zeiten aus. Die dieses Format haben:
    1221868803.76525
    Diese sind exakte Werte wo keine Ziffer abgeschnitten werden darf. Ich habe bisjetzt keinen Datentyp gefunden dem ich diese Zahlen zuweisen kann. Immer wird die Zahl ab bzw aufgerundet. Kann mir jemand sagen wie man diese Werte in C++ bearbeiten kann ohne ein Wert zu verlieren?

    Danke + Gruss,
    Haksi



  • haksi74 schrieb:

    Kann mir jemand sagen wie man diese Werte in C++ bearbeiten kann ohne ein Wert zu verlieren?

    1. 1221868803.76525 sollte eigentlich ohne Abschneiten in double dargestellt werden können; Aber: Gleitkommazahlen sind niemals genau (Diese Aussage ist Sprachunabhängig)
    2. Es gibt diverse Bibliotheken für Darstellung großer Zahlen die genau arbeiten, da ich so etwas aber bislang nicht speziell brauche (oder das verwendete Framework mitlieferte), kann ich dir jetzt keinen Link geben.

    cu André


  • Administrator

    Ich kann dir jetzt auch keine Bibliothek zur Hand geben, aber dafür Stichwörter, wonach du suchen solltest:
    - BCD (Binary Coded Decimal)
    - Big Integer
    - Currency Variable

    Grüssli



  • Warum immer wieder BCD? Mir sträuben sich die Nackenhaare wenn ich das sehe 😉
    Was spricht denn dagegen, ein long long zu nehmen (das reicht für diese Zahl und ihre Nachkommastellen dicke aus) und dieses als Zehntausendstel zu interpretieren? Das ist genau /und/ schnell. Und auch nicht so abartig ineffizient.


  • Administrator

    .filmor schrieb:

    Warum immer wieder BCD? Mir sträuben sich die Nackenhaare wenn ich das sehe 😉
    Was spricht denn dagegen, ein long long zu nehmen (das reicht für diese Zahl und ihre Nachkommastellen dicke aus) und dieses als Zehntausendstel zu interpretieren? Das ist genau /und/ schnell. Und auch nicht so abartig ineffizient.

    Weil BCD einfach gut ist, wenn es nicht um Performance geht. Also zum Beispiel in Office-Anwendungen ist BCD einmalige Spitze. Da wird sowieso zu 99% auf die Eingabe des Benutzers gewartet 😉
    Ein long long ist zum einen derzeit noch nicht Standard, zum anderen hast du bei long long Probleme bei der Multiplikation und Division, also wenn du long long für eine reelle Zahl verwenden willst. Denn vor der Division musst du eine der beiden Zahlen um die Anzahl Nachkommastellen verschieben, bzw. vergrössern. Das führt schnell zu einem Überlauf. Gleiches Problem hast du auch bei der Multiplikation, dort entsteht der Überlauf in der Multiplikation, denn man müsste am Ende das Resultat verkleinern.
    Wenn du nicht die normale Multiplikation oder Division von long long nehmen möchtest, sind wird schon bald wieder bei den BCD Zahlen 🙂

    Grüssli



  • Hallo,

    ich suche und suche und komme nicht voran. Ich habe folgende Anforderungen:
    1. Die Werte werden mit einer Rayleigh Distribution weiter bearbeitet
    2. Die Berechnung muzs sehr schnell gehen. Performance!!! keine hohe Auslastung

    Ich habe mit ein paar libs wie arbitary precision experimentiert doch kann ich diese libs nicht mit der Rayleigh funktion kombinieren. Ich habe von boost libs gehört. Habe aber damit keine Erfahrungen. Kennt sich jemand damit aus? Welcher lib von Boost w#re da hilfreich? Ich habe da ein lib mit Rayleigh gesehen. Bin für jeden Ratschlag dankbar.

    Gruss,
    Haksi


Anmelden zum Antworten