integer in double rundung



  • Was willst du denn da vermessen? Die Entfernung zwischen Hamburg und München auf den Zentimeter genau?

    (Anmerkung: Ich wundere mich nicht über die benötigte Genauigkeit, sondern über die Größenordnung, in der du rechnen willst)



  • CStoll schrieb:

    Was willst du denn da vermessen? Die Entfernung zwischen Hamburg und München auf den Zentimeter genau?

    (Anmerkung: Ich wundere mich nicht über die benötigte Genauigkeit, sondern über die Größenordnung, in der du rechnen willst)

    Okay, hier ein kleiner Crashkurs in Vermessungswesen.
    Es gibt in Deutschland ein gängies Koordinatensystem, das Gauß - Krüger System, dies wird für ganz Duetschland benutzt.
    Koordinaten im Gauß Krüger System haben alle 7 Stellen vor dem Komma. Ich stelle also 2 Punkte die einen Meter voneinander entfernt sind in GK Koordinaten , z.B. so da
    P1(3500000.00/5400000.00) und P2(3500001.00/5400000.00)
    Daher berechne ich mit diesen riesigen Koordinaten also nicht unbedingt riesige Strecken und daher benötige ich eine hohe Genauigkeit! Einigermaßen klar 🙂



  • Aha, das erklärt einiges (löst jedoch bestimmt nicht deine Probleme). In dem Fall bleibt dir wohl nur eine Koordinatentransformation, mit der du auf erträglichere Größenordnungen gelangst, oder eine Spezialbibliothek mit etwas höherer Genauigkeit (höre ich da GMP?).

    (PS: Nur aus Neugierde - wo liegt eigentlich der Punkt (0/0) in etwa?)



  • CStoll: Lass mal die Kirche im Dorf. Anscheinend ist double auf dem System unseres Unbekannten nur 32 Bit groß. Allerdings ist double nicht der größte dem Standard bekannten Datentyp, es gibt nämlich noch long double. Desweiteren gibt es bei sehr vielen Compilern nicht-standardisierte Datentypen, ein __int64 bzw. long long würde es in diesem Fall ja auch noch tun.

    Also, Unbekannter, versuchs mal mit long double statt double.



  • http://de.wikipedia.org/wiki/Gauß-Krüger_Koordinatensystem

    Guckst Du...
    Nullpuntk: Schnitt 0° Meridian durch Greenwich mit Äquator..

    Ja mein Problem besteht noch, was ist GMP??



  • Unbekannter: Habe ich dich richtig verstanden, dass du nix gegen ne noch größere Genauigkeit hast? Ein 8-Byte-Fließkommatyp kann dir problemlos bis auf Mikrometer speichern, was wohl reichen dürfte. Also vergiss GMP.



  • @Michael: Das Problem dürfte nicht die Größe der Werte sein, sondern die Genauigkeit. Und da hat long double auch nicht zwingend eine höhere Auflösung (von Ganzzahltypen will ich hier gar nicht anfangen).

    @Unbekannter: GMP ist eine Bibliothek für den Umgang mit (wirklich) großen Zahlen - schau dich mal hier im Board um, das wurde schon ein paarmal genannt.



  • Michael E. schrieb:

    Also, Unbekannter, versuchs mal mit long double statt double.

    Danke, aber leider nein.... 😞



  • CStoll schrieb:

    @Michael: Das Problem dürfte nicht die Größe der Werte sein, sondern die Genauigkeit. Und da hat long double auch nicht zwingend eine höhere Auflösung (von Ganzzahltypen will ich hier gar nicht anfangen).

    Dessen bin ich mir bewusst. Da ich aber davon ausgehe, dass das System des Unbekannten keine besonders abstrusen Datentypdarstellungen hat, reicht es vollkommen, auf einen 64-Bit-Datentyp zu gehen. 48 Bit würden auch schon reichen.

    Also nix mit GMP.



  • Wäre die Idee bescheuert zu sagen, ich lese die Daten in einen String, Füge nach 7 Stellen einen Punkt in den string ein und schiebe das über einen stringstream in die double Variable! Könnte das klappen????
    😕



  • Unbekannter schrieb:

    Michael E. schrieb:

    Also, Unbekannter, versuchs mal mit long double statt double.

    Danke, aber leider nein.... 😞

    Damit dieser Thread nicht im lustigen Rätselraten und dauernden GMP-Empfehlungen endet, nennst du uns bitte deinen Compiler und deine Architektur (wenns en PC ist, kannste das letzte weglassen).



  • Unbekannter schrieb:

    Wäre die Idee bescheuert zu sagen, ich lese die Daten in einen String, Füge nach 7 Stellen einen Punkt in den string ein und schiebe das über einen stringstream in die double Variable! Könnte das klappen????
    😕

    Nein.



  • Michael E. schrieb:

    Unbekannter schrieb:

    Wäre die Idee bescheuert zu sagen, ich lese die Daten in einen String, Füge nach 7 Stellen einen Punkt in den string ein und schiebe das über einen stringstream in die double Variable! Könnte das klappen????
    😕

    Nein.

    Könnte das klappen -> Nein oder
    Ist das bescheuert -> Nein

    PC mit XP Visual Studio.net 2003



  • CStoll schrieb:

    (von Ganzzahltypen will ich hier gar nicht anfangen).

    Schade, gerade den interessanten Teil lässt du weg. Ganzzahltypen haben nämlich den ungemeinen Vorteil, dass sie keine Exponenten speichern müssen. Somit kann man sich ganz leicht was basteln:

    typedef uint32 unsigned long;    // IIRC vom Standard garantiert
    
    class MyOwnNumerType
    {
    public:
        MyOwnNumberType(uint32 value_) : value(value_);
        { }
    
        std::string Print()
        {
            std::stringstream ss;
            ss << value;
            std::string svalue;
            ss >> svalue;
            svalue.insert(svalue.length() - 2, ".");
            return svalue;
        }
    
    private:
        uint32 value;
    };
    


  • Also auch mein string Lesen und Umwandeln, funktioniert nicht, im string stimmt noch alles aber wenn ichs dann über stringstream in die double Variable puste, wird wieder gerundet, so n....



  • Diesen Vorschlag hatte ich schon recht weit am Anfang gemacht - allerdings mit der Antwort "zu kompliziert und zu aufwändig".

    @Unbekannter: Die Bastelei mit dem Stringstream ist "bescheuert" und genauso exakt wie alle anderen bisherigen Versuche.



  • Unbekannter: Hmm, ich benutze denselben Compiler (wenn auch nicht dieselbe IDE). Bei mir funktionierts aber. Kannst du uns mal bitte die Ausgabe des folgenden Codes mitteilen?

    #include <iostream>
    using namespace std;
    
    int main()
    {
        long double foo;
        cout << sizeof(foo);
    }
    


  • CStoll schrieb:

    Diesen Vorschlag hatte ich schon recht weit am Anfang gemacht - allerdings mit der Antwort "zu kompliziert und zu aufwändig".

    @Unbekannter: Die Bastelei mit dem Stringstream ist "bescheuert" und genauso exakt wie alle anderen bisherigen Versuche.

    Jau, das hab ich grad auch gemerkt... 😃
    Öhm, also ich seh schon ich muß mir da mal was anderes überlegen, Danke für Eure Hilfe....



  • Michael E. schrieb:

    Unbekannter: Hmm, ich benutze denselben Compiler (wenn auch nicht dieselbe IDE). Bei mir funktionierts aber. Kannst du uns mal bitte die Ausgabe des folgenden Codes mitteilen?

    #include <iostream>
    using namespace std;
    
    int main()
    {
        long double foo;
        cout << sizeof(foo);
    }
    

    Ausgabe ist 8...



  • 😕 Und hiervon?

    #include <iostream>
    #include <iomanip>
    using namespace std;
    
    int main()
    {
        long long x = 3546478288726;
        long double x_neu = x/1000000.0; 
        cout << setprecision(13) << x_neu;
    }
    

Anmelden zum Antworten