Zahlen vergleichen
-
Hallo!
Ich erzeuge zufällige Kommazahlen vom Typ flaot oder double, die speichere ich dann in ein Array.
Und ich muss alle Stellen suchen wo eine 0 vorkommt.
Man darf ja keine float oder double zahlen mit 0 vergleichen also "==" darf net machen.
Nur mit <, oder > könnte man das machen.
Man sagte mir das es so ginge:
for(t=0; t<len; t++) { if(!(the_array[t].y > 0) - (the_array[t].y < 0)) { anz++; } }
Das was in der if(hier steht) steht, dass verstehe ich nicht... kann mir jemand das erklären bitte?
mfg frodo
-
Unfug. Das was da steht ist das gleiche wie ein direkter Vergleich mit 0. Und den kannst du hier durchaus machen. Verstehe aber, wieso man Fließkommazahlen normalerweise nicht mittels == vergleicht. Sprich: Erkläre, warum 10*0.1 != 1.0 ist.
Was dein "Tipp"geber hier wohl meinte, ist die vorzeichenbehaftete Null. Aber -0. == +0. auf 99.99999999% aller Systeme.
-
Dankeschön.
Also was soll ich jetzt genau schreiben? Und das was mein "Tipp"-geber mir gesagt hat verstehe ich leider auch noch nicht, sorry :(.
-
Also unter alle stellen, die null sind versteh ich, dass du nicht gucken sollst ob dem float/double eine 0 steht sondern welche stellen dieser 0 sind.
was aber irnwie seltsam ist, weil du ja nicht genau sagen kannst wie viele stellen du überhaupt hast.
-
@tobZel Er meint wohl alle Stellen im Array.
@froo12342 http://ideone.com/zO2o4
Wird dir jetzt klar, was das Ganze soll?
-
frodo12342 schrieb:
if(!(the_array[t].y > 0) - (the_array[t].y < 0))
Der Tippgeber zeigte, wie man auf Gleichheit von double testet, ohne den Vergleichsoperator zu benutzen.
In C liefern Vergleichsausdrücke immer int 0 (falsch) oder int 1 (wahr).
Für z.B.(2.0>3.0)-(2.0<3.0) also (0 )-(1 ) also -1 und !(-1) wiederum wird zu logisch falsch.
analog
(0.0>0.0)-(0.0<0.0) (0 )-(0 ) 0 !(0) -> wahr
-
Wutz schrieb:
frodo12342 schrieb:
if(!(the_array[t].y > 0) - (the_array[t].y < 0))
(0.0>0.0)-(0.0<0.0) (0 )-(0 ) 0 !(0) -> wahr
So ganz verstehe ich es noch nicht.
! heißt ja nicht bzw. negiert. Dann wird aber !0 zu 0_Negiert --> das is dann 1? Also falsch. Warum bleibt das 0?
Und stimmt das so: if(wahr(1)) dann anz++; und if(falsch(1)) dann nicht anz++;?
Es soll ja immer anz++; machen, wenn im Array an stelle y eine 0 vorkommt.
-
Auch der logische Negationsoperator ! liefert 0 oder 1 und ganz allgemein in C entspricht == 0 logisch falsch und != 0 logisch wahr, d.h. 0 -> falsch, 1 -> !=0 -> wahr.
Z.B. bei if entspricht dannif( x ) einem if( x!=0 )
und ebenso
if( !x ) einem if( x==0 )