Maschinengenauigkeit



  • It0101 schrieb:

    rapso schrieb:

    zwei unterschiedliche maschinen werden dir ein anderes ergebnis liefern, trotz desselben datentyps.

    Ja, sie werden vielleicht unterschiedliche Ergebnisse liefern, aber möglicherweise mit der gleichen Genauigkeit ( also z.B. mindestens exakt auf 6 Stellen hinter dem Komma )

    und moeglicherweise auch mit einer ganz anderen genauigkeit.

    Das Konzept einer Fließkommazahl ist ja festgelegt.

    X-Bits für die Mantisse
    Y-Bits für die Basis ( evtl. ein konstanter Wert )
    Z-Bits für den Exponenten

    es geht ja auch nicht um das konzept, bei konzepten sind sich sehr viele einig, es kommt dann aber auf die implementierungsdetails an und die sind oft sehr unterschiedlich.

    Ein Bit ist auf jeder Maschine ein Bit. Und wenn die Zahlen X, Y und Z für beide Maschinen konstant sind, dann werden die Zahlen auch identisch abgebildet.

    das ist nur das 'konzept' der zahlenspeicherung, nicht das konzept der internen verarbeitung, denn das ist nicht festgelegt, festgelegt im IEEE754 standard ist lediglich wieviel die ergebnisse vom perfekten ergebnis abweichen duerfen siehe: http://en.wikipedia.org/wiki/Unit_in_the_last_place

    Unterschiede können jetzt nur noch auftreten, wenn die Prozessoren Rechenprozesse unterschiedlich abbilden, falls das überhaupt möglich ist.

    es ist eher andersrum, preozessoren koennen rechenprozesse bei float fast garnicht gleich abbilden. selbst verschiedene cpus von z.b. intel haben unterschiedliche rechenprozesse, ein atom ist eher auf sparsamkeit ausgelegt und iteriert bei einer division ewig, ein i7 hat eine radix-16 divisionseinheit, macht also pro takt 4bits.

    viele operationen bei floats sind heutzutage ueber naehrungen implementiert. bis vor kurzem konnte z.b. keine CPU wirklich dividieren, es liefen bei CISCs microcodes durch die in mehreren durchlaeufen das ergebnis naeherten, bei RISCs ist es noch heute so, dass normaler code durchlaeuft der divisionen approximiert indem z.b. bei AltiVec eine reciproce, dann im loop interpolate+multiplyadd durchgefuehrt wird bis es dir genau genug ist.



  • float kann nur 6 signifikante Dezimlstellen speichern. Aber warum wird auch gerundet ?

    float y = 123456789;  
    
    cout << y;
    
    // Ausgabe 123457
    


  • krümelkacker schrieb:

    Verwechselst du hier vielleicht die Genauigkeit von float mit der Art und Weise, wie floats per Default bei Streams ausgegeben werden?

    volkard schrieb:

    Außerdem zeigst Du damit noch keine Ungenauigkeit von float, sondern eventuell rundet die Ausgabe nur verdammt früh.

    blurry333 schrieb:

    auch bei float x= 1234567 wird gerundet obwohl das binär nur 21 Stellen sind. Das müßte doch genau in die Mantisse passen ???

    blurry333 schrieb:

    Scheinbar rundet nur der Stream, aber der float passt wohl.

    Du solltest vielleicht die Antworten, die du bekommst, demnächst aufmerksamer lesen.



  • Die Ausgabe ist 1.23457 e^008

    und es wird gerundet!!



  • blurry333 schrieb:

    Die Ausgabe ist 1.23457 e^008
    und es wird gerundet!!

    Nach e schreibt man immer ^, das hatte irgendwas mit Mathe zu tun? 🤡
    Außerdem zeigst Du damit noch keine Ungenauigkeit von float, sondern eventuell rundet diue Ausgabe nur verdammt früh.

    double y = 123456789.0;
    cout << y;
    

    Siehste? Auch 1234567e+008.

    Aber

    float y = 123456789.0;
    cout << y-123456000.0;
    

    verrät sich mit 792 statt 789.



  • auch bei float x= 1234567 wird gerundet obwohl das binär nur 21 Stellen sind. Das müßte doch genau in die Mantisse passen ???



  • Fazit:

    Scheinbar rundet nur der Stream, aber der float passt wohl.

    Und ähm es muss e+008 heissen und nicht e^008


  • Mod

    edit: Wenn wir schon so ein schönes Zitat haben, dann zitiere ich es noch einmal, weil es so schön passt:

    krümelkacker schrieb:

    krümelkacker schrieb:

    Verwechselst du hier vielleicht die Genauigkeit von float mit der Art und Weise, wie floats per Default bei Streams ausgegeben werden?

    volkard schrieb:

    Außerdem zeigst Du damit noch keine Ungenauigkeit von float, sondern eventuell rundet die Ausgabe nur verdammt früh.

    blurry333 schrieb:

    auch bei float x= 1234567 wird gerundet obwohl das binär nur 21 Stellen sind. Das müßte doch genau in die Mantisse passen ???

    blurry333 schrieb:

    Scheinbar rundet nur der Stream, aber der float passt wohl.

    Du solltest vielleicht die Antworten, die du bekommst, demnächst aufmerksamer lesen.

    Jetzt also schon dreimal die bisherigen Antworten im Thread zitiert, da sie offensichtlich nicht gelesen wurden 🙄



  • Wieso antwortet eigentlich noch jmd. auf die Fragen von blurry?



  • hustbaer schrieb:

    Wieso antwortet eigentlich noch jmd. auf die Fragen von blurry?

    Den ursprünglichen Fehlgedanken zu widerlegen finde ich schon ok. Den Rest... naja, ack 😉


Anmelden zum Antworten