Ergebnis 1 bis 8 von 8

Thema: double zu wenige stellen

  1. #1

    double zu wenige stellen

    hi

    ich wollte vor kurzem ein C++ programm schreiben (ok...)

    dabei habe ich einer double variable einen relativ großen Wert zugewießen

    Code:
    ...
    double a=44661136933246935817181986703472279701061600629660875489613.0;
    ...
    diese liegt ja im im Wertebereich

    problem
    habe mir zahl wieder ausgeben lassen und es wird nur
    Code:
    44661136900....00.0000000e54
    oder so änhnlich ausgegeben, viele stellen werden 0-gestetzt, sie sind aber wichtig.

    ist das normal?????

    mfg
    darkmasta

  2. #2
    Ja, das ist normal, weil Fließkomma-Zahlen in Variablen als Basis und Exponent gespeichert werden. Daher sind (theoretisch) unendlich große Zahlenwerte möglich, es treten aber Rundungsfehler auf. Und da die 8 byte des Doubles eben für Basis und Exponent geteilt werden (das genaue Verhältnis weiß ich grad nicht) stehen eben nur eine begrenzte Anzahl von Ziffern vor dem Komma zur Verfügung, wie auch begrenzte Ziffern als Exponent.

    Andere Frage - wozu brauchst du in deinem Programm Variablen mit solch riesigen Werten bzw. wieso muss die Genauigkeit nach der 10ten Stelle von links noch so genau sein? Bei diesem riesigen Betrag müsste der Wert doch verschwindend unbedeutsam sein, ob nun 0 oder 9, oder was dazwischen...

  3. #3
    http://swox.com/gmp/
    Die Library scheint Datentypen mit unbegrenzter Präzision anzubieten.

  4. #4
    Zitat Zitat
    Andere Frage - wozu brauchst du in deinem Programm Variablen mit solch riesigen Werten bzw. wieso muss die Genauigkeit nach der 10ten Stelle von links noch so genau sein? Bei diesem riesigen Betrag müsste der Wert doch verschwindend unbedeutsam sein, ob nun 0 oder 9, oder was dazwischen...
    weil es nicht um den betrag/Wert, sonder um die Zahl geht

    ok, wenn das normal ist muss ich mir mal den link ansehen

  5. #5
    Irgendwo hab ich mal gelesen, dass man unter C++ eigene Datentypen erstellen kann, die theoretisch auch 64 bit, 128 und mehr mehr haben können. Keine Ahnung wie genau das geht, hab ich noch nie gebraucht, aber mit 256 Bit kannst du Zahlen im Bereich von 1,1579208923731619542357098500869e+77 speichern, was selbst für deine Zwecke ausreichen sollte.

  6. #6
    *schmunzel* Ich habe mich mal mit der Theorie auseinander gesetzt.

    Es ist möglich. Und für mathecracks nicht sonderlich schwer. Man muss die Zahlen in ein anderes Zahlensystemsystem umrechnen.

    100|10||0|-10|-100|

    In ein högheres System urmechnen. Dabei gibt es nur halt programmeirerische Barrieren. Und wie gesagt.. nur die THeorie..die Praxis? keine Ahnung...>_<

    jedenfalls habe ich meinen Mathe- und Informatiklehrer gefragt, der meinte so wäre es möglich eine höhere ANzahl an Nachkommastellen (und demnach auch VOrkommastellen) zu erreichen.

    Solltest du soetwas schaffen wäre ich am Quellcode interessiert. ^^

  7. #7
    Das Problem bei der Sache ist, dass man weder im Binärsystem, noch im Hexadezimalsystem ein Zehntel genau darstellen kann. Deshalb arbeiten die meisten Libs, die höhere Genauigkeiten liefern sollen, mit Strings, in denen die Zahlen dezimal dargestellt werden. Das verschwendet zwar unheimlich viel Speicher (3 Bits pro Ziffer), ist dafür aber wirklich genau.

    Ein anderer Ansatz wären Brüche, aber die sind nicht unbedingt einfach zu implementieren.

    Geändert von DFYX (26.02.2007 um 10:23 Uhr)

  8. #8
    Zitat Zitat von DFYX Beitrag anzeigen
    Ein anderer Ansatz wären Brüche, aber die sind nicht unbedingt einfach zu implementieren.
    Na ja ein Struct und ein paar ueberladene Operatoren ... allerdings ...
    Was ist mit irrationalen Zahlen ? Komplexen Zahlen, Octonionen, Hyperreellen Zahlen, Surrealen Zahlen, Games ... muss ich weiter machen ?

    Die Frage gleibt aber immer noch, wofuer er so eine obskure Zahl braucht ? Wenn es nur um die Zahl geht, aber diese nicht verrechnet werden muss, kann er sie ja auch als z.B. Stringliteral verwenden ^__-

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •