Gleitpunktzahl - Test ob negativ/positiv
-
~fricky schrieb:
Bashar schrieb:
Wenn du nicht wusstest, dass es überhaupt +0 und -0 gibt, könnte es sich vielleicht lohnen, das ganze Paper zu lesen.
ich wusste schon dass es die gibt, nur nicht warum. aber danke für den tip.
Kurz abgerissen findest Du's hier:http://de.wikipedia.org/wiki/IEEE_754#Null
Wobei mir immer noch nicht klar ist, wozu das gut sein soll. Mein selbstgebasteltes FP- Paket verwendet 2K für Mantisse und BIAS für den Exponenten, also gibt es nur eine Null.however, that would result in the disastrous consequence of losing the sign of an overflowed quantity.
Das stimmt, aber ich kann das Desaströse daran nicht erkennen, das Problem beginnt ja mit dem Überlauf, danach weiterzurechnen, macht sowieso keinen Sinn, ob ich jetzt ein +0 oder ein -0 Problem habe, ich kann das Komma nicht so weit verschieben, daß mir die Mantisse nicht zu 0 wird.
Wenn ich gegen einen Baum gefahren bin, interessiert es mich ja auch herzlich wenig, ob das eine Eiche oder eine Buche war - oder übersehe ich da was
-
hando schrieb:
Hallo Community,
..
Wie fragt man hier am effektivsten das erste Bit ab? Hatte einen Ansatz die 1 als Maske zu verwenden und über UND zu vergleichen. Allerdings gibts da Haue vom Compiler, wenn die Maske vom Typ int ist, die Zahl jedoch vom Typ double.
Hat jemand einen Hinweis?
...Hallo,
am effektivsten weiss ich nicht, aber du kannst dir das höchste Byte schnappen und davon das höchste Bit auf 0 oder 1 testen.
Es folgt eine Little-Endian-Version, guckst du:bool double_is_minus ( double d ) { unsigned char* p = (unsigned char*)&d +sizeof(double)-1; return (*p&0x80) != 0; } int main() { printf ( "%d\n", double_is_minus(-0.0)); printf ( "%d\n", double_is_minus(0.0)); printf ( "%d\n", double_is_minus(-1.0)); printf ( "%d\n", double_is_minus(1.0)); return 0; }
-
[edit]unsinn[/edit]
-
Big Brother schrieb:
bool double_is_minus ( double d )
Amazing your english! Yo see me !iMpReSsED!
-
fricky schrieb:
falls float/double zwei nullen mit verschiedenen vorzeichen zulassen, wird's wohl ein fehler im system sein.
Auf die Sache mit +/-INF hätte ich auch selbst kommen sollen -- however:
So wie das System momentan aussieht, lässt es prinzipiell +0 und -0 zu.
Man müßte nach deiner Theorie einen einzigen der möglichen Float-Werte als ungültig
erklären. Sowas widerstrebt sogar Nicht-Mathematikern (wie mir).
-
pointercrash() schrieb:
~fricky schrieb:
Bashar schrieb:
Wenn du nicht wusstest, dass es überhaupt +0 und -0 gibt, könnte es sich vielleicht lohnen, das ganze Paper zu lesen.
ich wusste schon dass es die gibt, nur nicht warum. aber danke für den tip.
Kurz abgerissen findest Du's hier:http://de.wikipedia.org/wiki/IEEE_754#Null
Wobei mir immer noch nicht klar ist, wozu das gut sein soll.dazu steht was in dem artikel, den basher genannt hat. z.b. wenn man mit komplexen zahlen rumhantiert, dass sqrt(1/-1) das gleiche ist, wie 1/sqrt(-1), dass aus log(0) -∞ wird, usw. hauptsächlich aber, um das vorzeichen einen übergelaufenen wertes nicht zu verlieren (vielleicht um rauszufinden, ob's plus oder minus unendlich geworden ist?). irgendwo steht da auch, dass die vorteile der vorzeichenbehafteten null die nachteile überwiegen, deshalb hat man sich dafür entschieden.
bgdnoy schrieb:
Man müßte nach deiner Theorie einen einzigen der möglichen Float-Werte als ungültig erklären.
nö, man hätte doch bestimmt eine verschiebung des wertebereichs machen können, wie z.b. bei den integers mit dem zweierkomplement. bestimmt gibt's auch float-formate mit nur einer null.