PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [C] int = floor( int )


Gast
2006-12-05, 20:04:03
Hi,

ich verstehe den Casting-Quark in C nicht:

Code-Fragment:
int x, N;
...
x = floor( N / 2 );

Fehlermeldung:
test.o: In function `main':
test.c:(.text+0x99): undefined reference to `floor'

x und N sind Integer. N soll halbiert werden und x dann die nächst kleinere ganze Zahl sein.
floor erwartet ein double-Argument und gibt auch ein Double zurück, interessiert mich so aber nicht, da ich nur Integer habe/brauche.

Hab schon an allen möglichen Stellen int- oder double-Casts geklatscht, aber das bringts offenbar nicht, zB:
x = (int)floor( (double)( N/2 ) );
Klappt so natürlich nicht; wäre ja auch albern, wenn es in C so funktionieren würde, wie man es sich intuitiv sofort vorstellen kann...

Wie kommt man da weiter?

Matrix316
2006-12-05, 20:16:46
Hm, casting sollte ganz alleine gehen. Also bei mir gibts keine Fehlermeldung:


int x,y;
y=4;
x = floor(y/2);

math.h ist includiert? ;)

Elemental
2006-12-05, 20:24:02
Die Fehlermeldung hat doch mal rein garnichts mit casten zu tun...

Gast
2006-12-05, 20:26:58
math.h ist includiert? ;)Ja, ist drin.

Gast
2006-12-05, 20:27:38
Die Fehlermeldung hat doch mal rein garnichts mit casten zu tun...Aha, und womit dann?

Coda
2006-12-05, 20:47:42
Das die Funktion floor nicht definiert ist? Und zudem gibts floor für Integer gar nicht.

Was du willst ist "x = N/2;" Integer werden automatisch abgerundet. Es gibt ja gar keine krummen Werte.

Matrix316
2006-12-05, 21:06:16
Und was ist mit negativen Werten? -2.6 würde zu -2, obwohl es gerundet -3 wäre. Oder ist das schon im int Typ richtig definiert?

EDIT: es müsste dann so gehen: x = floor((double)N/2);

Coda
2006-12-05, 21:12:04
Ja, Integer runden immer gegen 0. Aber das ist auch gut so meistens.

Matrix316
2006-12-05, 21:16:19
Naja, was heißt runden. Der Nachkommateil wird einfach weggelassen, oder?

Coda
2006-12-05, 21:17:03
Ja, runden ist das falsche Wort. "floor" ist ja auch ned runden...

rotalever
2006-12-13, 18:35:31
Hast du math auch beim kompilieren verlinkt? Ich nehme mal an du hast gcc. Ansonsten ist der Code Ok. Aber wozu eigentlich das floor? Da es ein integer ist wird automatisch abgeschnitten. Das floor kostet je nach dem vll. noch Performance...