integer in double rundung



  • 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;
    }
    


  • Also da funktionierts, in meinem Projekt aber net....
    Moment, ich muß mal was schauen.... 😕



  • ich bin ziemlich sicher das er(Unbekannt) eine fehlermeldung bekommen wird...

    *mal sehen*



  • Lustiges Rätselraten hier.
    Etwas Code würde das ganze erheblich abkürzen.
    Kurt



  • immigrant schrieb:

    ich bin ziemlich sicher das er(Unbekannt) eine fehlermeldung bekommen wird...

    *mal sehen*

    Wir können ja wetten 🕶

    ZuK: Nicht mehr nötig, siehe Unbekannters Antwort vor dir.

    [Edit] Das Ganze wurd erst zum lustigen Rätselraten, weil er gemeint hat, mit long double würds nicht funktionieren.



  • Also ich weiß net mer weiter, in meinem Projekt klappts net
    Also ich hab jetzt folgendes:

    long long e,n;
    in>>e;
    in>>n;
    //Hier lese ich die 9-stellige Zahl aus der Datei ein, lass ich mir e und n ausgeben, stimmt alles....
    long double east = e/100.0;
    long double north = n/100.0;
    //so und nun lass ich mir north und east ausgeben und schwupps sind die Nachkommastellen wieder gerundet?????????????
    

    Das ist faszinierend!!! Kann es daran liegen, dass ich in diesem Projekt die MFC benutze, weiterhin benutze ich auch OpenGL Bibs.... 😕 😕



  • Schau mal im Debugger, ob east und north genaue Werte speichern. Falls ja, wovon ich ausgehe, schneidet dir die Ausgabe an den Daten rum. Das gehört dann allerdings ins MFC-Board.



  • Okay, ich habs.....
    Öhm, hüstel, hüstel, ich hatte auf dem Weg von long zu double ne float Variable im Spiel, die mir das ganze verhunzt hat! Tja manchmal sieht man halt den sprichwörtlichen Wald vor lauter Bäumen net!

    Ganz großer Sport von Euch allen Jungs und Mädels

    Grüße & Danke 👍


Anmelden zum Antworten