Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

24.06.2008, 14:51

double mit cout ausgeben

Tach zusammen

Ist es möglich mittels cout eine double variable in voller länge auszugeben?
Ich hab gegooglet aber ich finde irgendwie nichts zu diesem Thema.

gruss neptun

grek40

Alter Hase

Beiträge: 1 491

Wohnort: Dresden

  • Private Nachricht senden

2

24.06.2008, 15:22

schau dir ma cout.precision an

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

3

24.06.2008, 17:25

Oder gleich das hier:

http://www.cplusplus.com/reference/iostream/manipulators/

4

25.06.2008, 16:24

Mein Programm liest zahlen aus einer ASCII-codierten Datei.
Sobald ein Punkt gefunden wird, rechnet das Programm die Zeichen nach folgendem Schema um:

Quellcode

1
2
                        *pX += ( ((double)(pcChar[pos] - 48)) / ((double)(10 * komma)) );
                        komma *= 10;


(Komma ist quasi der Zähler um welche Nachkomme-Stelle es sich handelt. Anstatt zu exponieren verwende ich einfach komma *= 10;)
wenn ich dann das Ergebniss mittels cout ausgebe, stimmt die Zahl auch. Nur werden mehr Stellen nach dem Komma ausgegebn, als die Zahl eigentlich haben dürfte.
Ich kann mir nicht erklären wieso.

Ich caste ja alles zuerst um. Wieso entstehen trotzdem diese "Rundungsfehler"?
Jemand ne Ahnung?

5

25.06.2008, 16:39

1. eine Zahl hat niemals eine feste Anzahl an Nachkommastellen. Nur die Darstellung einer Zahl hat eine bestimmte Menge an Nachkommastellen.
2. Es ist immer gut zu wissen, das Gleitkommazahlen eine gewisse ungenauigkeit haben. Sie können einen enormen Zahlenbereich abdecken, aber nicht jede Zahl aus ihm speichern.
Lieber dumm fragen, als dumm bleiben!

6

25.06.2008, 16:45

wenn ich die Zahl aber direkt in die double Variable schreibe, werden exakt nur soviele Stellen ausgegeben.
Beispiel:
x = 123456.123456
cout.precision(15);
cout<<x<<endl;

Erbiniss:
123456.123456

Habe ich diese Zahl in der Datei stehen, werden mehr Stellen als nötig angegeben:
123456.123456799

Edit:
Fehler gefunden! die Variable komma war vom Typ short und lief demnach nach zu viele Kommstellen über!

7

25.06.2008, 20:05

Warum verwendest du nicht direkt den Eingabestrom der Textdatei um die Fließkommazahl abzugreifen. So kommst du auch um diese casts rum.

Exemplarisch:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
#include <iomanip>
#include <sstream>

int main()
    {
        // Textdatei wird mittels String-Stream simuliert

        std::stringstream ss("123456.1234569991\n");
        
        double wert;
        ss >> wert;
        std::cout << std::setprecision(20) << wert << std::endl;
    }


Grüße... Heiko

8

27.06.2008, 00:40

Hallo
Verstehe jetzt nicht ganz was du meinst.
Die Fliesskommazahl kann irgendwo in der Datei stehen. Ich muss die Datei zuerst parsern und nach bestimmten Schlüsselwörtern durchsuchen.

rootnode

Frischling

Beiträge: 92

Wohnort: Aachen, Pontstraße

Beruf: Student

  • Private Nachricht senden

9

27.06.2008, 00:54

Dann wirst du einen parser schreiben müssen.

Boost::Spirit eignet sich dafür ganz gut.
Sag mir was genau du parsen musst, also mit welchen schlüsselwörtern etc, dann kann ich dir helfen.

10

27.06.2008, 01:10

Ich will eine obj Datei parsern, damit ich nachher die Modelle rendern kann.
Das obj Format ist ja im ASCII Format und die Fliesskomma-Zahlen sind dann halt jeweils als einzelne Charakter vorhanden. Deshalb auch die Umrechnerei. Mein Weg war bis jetzt der, das ich nach gewissen Schlüsselwörtern suche (z.b v) und dann die Stelle an eine weitere Funktion gebe, die dann Zahlen und Fliesskomma-Zahlen auslesen kann.
Gibt es eine einfachere Möglichkeit an die Zahlen umzurechnen?

Werbeanzeige