0.0 == -0.0?
-
Dravere schrieb:
Soweit mir bekannt ist, gibt es schliesslich keine Möglichkeit zu prüfen, ob es jetzt ein positives oder negatives Null ist.
Stimmt, da würde mir jetzt auch nichts einfallen.
-
-
Dravere schrieb:
Tut mir leid, aber ich sehe keine praktische Verwendung für sowas:
1. Der genaue Wert fehlt mir ja immer noch, um den also rauszufinden, muss ich die Berechnung nochmals durchführen mit einer Zahl, welche dies genauer darstellt. Dann werde ich diese Information auch haben.Manchmal braucht man ja nur das Vorzeichen (zB wenn es darum geht, ob ein Punkt links oder rechts von einer Fläche liegt)
Dravere schrieb:
2. Ich kann es ausgeben, aber ansonsten nichts im Programmcode damit anfangen. Soweit mir bekannt ist, gibt es schliesslich keine Möglichkeit zu prüfen, ob es jetzt ein positives oder negatives Null ist.
siehe Tim.
-
Wie genau funktioniert signbit? Wenn ich auf eine negative Zahl prüfen wollte, würde ich einfach x < 0 nehmen, das geht ja aber schlecht, wenn x = 0 ist.
-
Mal als 32-Bit float Variante
int signbit (float x) { return *((uint32_t *)&x) >> 31; }
-
rüdiger schrieb:
Dravere schrieb:
Tut mir leid, aber ich sehe keine praktische Verwendung für sowas:
1. Der genaue Wert fehlt mir ja immer noch, um den also rauszufinden, muss ich die Berechnung nochmals durchführen mit einer Zahl, welche dies genauer darstellt. Dann werde ich diese Information auch haben.Manchmal braucht man ja nur das Vorzeichen (zB wenn es darum geht, ob ein Punkt links oder rechts von einer Fläche liegt)
Wie gesagt wären Beispiele da ganz interessant und wie oft sowas tatsächlich benötigt wurde. Unteranderem dann auch die Frage, ob sich sowas nicht durch die Berechnung bereits früher ergeben haben könnte?
rüdiger schrieb:
Dravere schrieb:
2. Ich kann es ausgeben, aber ansonsten nichts im Programmcode damit anfangen. Soweit mir bekannt ist, gibt es schliesslich keine Möglichkeit zu prüfen, ob es jetzt ein positives oder negatives Null ist.
siehe Tim.
Tim schrieb:
In C++, C#, Java und vor allem IEEE 754 nicht vorhanden.
Grüssli
-
if(signbit(-0.0) == -0)
Ergibt bei mir kein true.
-
FreakY<3Cpp schrieb:
if(signbit(-0.0) == -0)
Ergibt bei mir kein true.
Lies die Dokumentation
signbit(-0.0) ergibt einen Wert ungleich 0, somit true.
signbit(0.0) ergibt 0, somit false.Grüssli
-
Aso, hehe okay mein Fehler, danke :p
-
Dravere schrieb:
rüdiger schrieb:
Dravere schrieb:
2. Ich kann es ausgeben, aber ansonsten nichts im Programmcode damit anfangen. Soweit mir bekannt ist, gibt es schliesslich keine Möglichkeit zu prüfen, ob es jetzt ein positives oder negatives Null ist.
siehe Tim.
Tim schrieb:
In C++, C#, Java und vor allem IEEE 754 nicht vorhanden.
Sollen wir jetzt für alle genannte Sprachen was für dich basteln?
-
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
Viel wichtiger ist mir eigentlich, dass der Standard IEEE 754 diese Funktion nicht hat. Das von C99 ist somit eine inoffizielle Erweiterung, welche auch noch gar nicht so alt ist. Der Standard wurde verabschiedet ohne diese Funktion, also sah man ein sinnvolles Einsatzgebiet ohne diese Funktion? Da würde es mich schwer wundernehmen welches und wie gross (sinnvoll?) dieses tatsächlich ist?Weiss jemand eigentlich wie das im Standard IEEE 754r ist? Wurde dieser Standard schon überhaupt irgendwo vollständig eingeführt?
Grüssli
-
Dravere schrieb:
Wie gesagt wären Beispiele da ganz interessant und wie oft sowas tatsächlich benötigt wurde. Unteranderem dann auch die Frage, ob sich sowas nicht durch die Berechnung bereits früher ergeben haben könnte?
Ich hab doch ein Beispiel genannt.
Dravere schrieb:
In C++, C#, Java und vor allem IEEE 754 nicht vorhanden.
In C++0x ist es dabei und im Notfall kann man es ja schnell selbst basteln. Laut der Manpage ist es aus IEEE754:
This function is defined in IEC 559 (and the appendix with recom-
mended functions in IEEE 754/IEEE 854).Java hat eh keine richtigen IEEE754 Floatingpoints.
-
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.
rüdiger schrieb:
Laut der Manpage ist es aus IEEE754:
This function is defined in IEC 559 (and the appendix with recom-
mended functions in IEEE 754/IEEE 854).Klingt eher nach IEEE 754r, da dort IEEE 754 und IEEE 854 zusammengeführt wurden.
Grüssli
-
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: 10000000was 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: 10000000Und 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 : 9174 + 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.