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


  • Mod

    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 dann

    if( x )
    einem
    if( x!=0 )
    

    und ebenso

    if( !x )
    einem
    if( x==0 )
    

Anmelden zum Antworten