0.0 == -0.0?



  • Dravere schrieb:

    Tim schrieb:

    Sollen wir jetzt für alle genannte Sprachen was für dich basteln?

    Ich will mal sehen, wie du das in Java oder C# machen willst, aber muss nicht sein 😉

    Bei Java würde ich spontan sowas wie floatToIntBits(x)>>>31 nehmen. Die MSDN ist mir mittlerweile zu fremd als dass ich da noch irgendwas finden würde.



  • Dravere schrieb:

    rüdiger schrieb:

    Ich hab doch ein Beispiel genannt.

    Ich habe eine andere Definition von Beispiel. Das war für mich eher ein theoretisches Konstrukt.

    Das ist kein theoretisches Konstrukt. Zumindest hatte ich neulich erst eine längere Unterhaltung mit jemanden darüber, der dass in seinen FEM-Sachen/Devicesimulationen einsetzt.





  • Also ich denke false, weil:

    Nehmen wir das Beispiel 0 und -0 mit dem Variablentyp Byte (8 Bit mit Vorzeichen).

    0 wäre dann: 00000000
    -0 wäre dann: 10000000

    was ja nicht das gleiche ist...

    Natürlich könnte ich völlig auf dem Holzweg sein ^^



  • Samyboy schrieb:

    Nehmen wir das Beispiel 0 und -0 mit dem Variablentyp Byte (8 Bit mit Vorzeichen).

    0 wäre dann: 00000000
    -0 wäre dann: 10000000

    Und wo bringst du da die Nachkommastellen unter?
    🙂



  • Float wird, wenn ich micht nicht irre, als Exponent gespeichert.
    Die länge beträgt deshalb nur 4 bits. (zu prüfen with sizeof(float)).

    Ach ganz nebenbei:
    true
    74%
    74% [ 68 ]
    false
    25%
    25% [ 23 ]
    Stimmen insgesamt : 91

    74 + 25 = 100 😃



  • Tim06TR schrieb:

    Float wird, wenn ich micht nicht irre, als Exponent gespeichert.
    Die länge beträgt deshalb nur 4 bits. (zu prüfen with sizeof(float)).

    Bytes, Bytes! Oder auch mehr als 4, oder auch weniger. Das ist aber eher unüblich.

    Float wird gespeichert als ein Vorzeichen, ein Exponent zu einer bestimmten Basis, und eine Summe von gewichteten Stellen zu einer bestimmten Zahlen-System-Basis. So kann's natürlich vorkommen, dass, wie du richtig bemerkt hat, die einzelnen Rundungen einen minimalen Fehler anstreben, und dann ihre Summe ein wenig von der exakten Summe abweicht.
    🙂



  • Tim06TR schrieb:

    Float wird, wenn ich micht nicht irre, als Exponent gespeichert.
    Die länge beträgt deshalb nur 4 bits. (zu prüfen with sizeof(float)).

    Das ergibt für mich so richtig gar keinen Sinn 😕
    Mal ganz abgesehen davon dass du Bytes mit Bits verwechselst.
    Aber was soll "float wird als Exponent gespeichert" heissen?
    Float wird als Mantisse + Exponent gespeichert, wobei sich der Wert dann aus Mantisse + 2 ^ (K + Exponent) ergibt. Bei float ist das Vorzeichen IIRC teil der Mantisse. Bei double gibt's ein eigenes Vorzeichen Bit.

    Ich hoffe das stimmt jetzt 😃



  • hustbaer schrieb:

    Float wird als Mantisse + Exponent gespeichert, wobei sich der Wert dann aus Mantisse + 2 ^ (K + Exponent) ergibt. Bei float ist das Vorzeichen IIRC teil der Mantisse. Bei double gibt's ein eigenes Vorzeichen Bit.

    float und double sind identisch aufgebaut. Nur Mantisse und Exponent haben bei double etwas mehr Bits. Ein separates Vorzeichenbit haben beide.

    Eine Fließkomma-Zahl nach IEEE754 besteht aus Vorzeichenbit, Mantisse und Exponent. Die Mantisse ist (normalerweise) normiert auf "1.<nachkommastellen>" (abgesehen von ein paar Spezialfällen). Weil die führende 1 immer gleich ist, wird die nicht gespeichert. Die gespeicherte Mantisse ist damit eine Zahl zwischen 0 und 1, stellt aber eine Zahl zwischen 1 und 2 dar.

    Der Exponent kann auch negativ sein, aber eine 2er-Komplement- oder Vorzeichen-Betrag-Darstellung wird dafür nicht genutzt. Es wird nur eine Konstante draufaddiert. Ich habe mal gehört, dass das praktischer sein soll für verschiedene Berechnungen, vor allem auch für den größer-als-Vergleich.

    Der Wert einer normalisierten IEEE754-Fließkommazahl ist zusammen:
    Wert = Vorzeichen * (1 + Mantisse) * 2^{exponent - bias}



  • hustbaer schrieb:

    Tim06TR schrieb:

    Float wird, wenn ich micht nicht irre, als Exponent gespeichert.
    Die länge beträgt deshalb nur 4 bits. (zu prüfen with sizeof(float)).

    Mal ganz abgesehen davon dass du Bytes mit Bits verwechselst.
    Aber was soll "float wird als Exponent gespeichert" heissen?
    Float wird als Mantisse + Exponent gespeichert, wobei sich der Wert dann aus Mantisse + 2 ^ (K + Exponent) ergibt. Bei float ist das Vorzeichen IIRC teil der Mantisse. Bei double gibt's ein eigenes Vorzeichen Bit.

    Ich hoffe das stimmt jetzt 😃

    Ok ja, ist mir gar nicht aufgefallen, dass mit der Bit, Byte sache.


Anmelden zum Antworten