PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : runden mit c



feuervogel
02-11-2005, 18:23
hallihallo!

wahrscheinlich ist die lösung zu meinem problem recht einfach, jedoch bin ich grad zu blöd sie zu finden.

ich würde gerne runden in der programmiersprache c.

hier (http://www.dinkumware.com/htm_cl/math.html#round) steht, es gibt die funktion round. diese rufe ich auf:

#include <stdio.h>
#include <math.h>

int main() {

double t;
t = 2.5;
t = round( t );
printf( "%22.10e\n" , t )

return 0;

}

rauskommen tut aber einerseits nur die warnung:

warning: implicit declaration of function `round'

andererseits bei der ausgabe erscheint mist:

2.6217600000e+05

wo liegt also mein denkfehler?

bmann
02-11-2005, 18:52
Zunächst einmal darin, dass hinter dem printf() ein ; fehlt.
Ansonsten funltioniert obiger Code bei mir Problemlos:


gcc -Wall -pedantic main.c -std=c99 -lm
./a.out
3.0000000000e+00


Evtl. liegt es am fehlenden -std=c99 ? Laut man round:


Compile with -std=c99; link with -lm.


CU
Andi

feuervogel
02-11-2005, 19:26
kann gut sein, habe mir einfach das debian-paket installiert und weiß nicht, womit das standardmäßig compiled ist.

peschmae
02-11-2005, 19:36
Jetzt mal abgesehen davon dass man natürlich mit Fliesskommazahlen in die Wand laufen kann in Grenzfällen:



double t;
t = 2.5;
t = (int) t + 0.5;


tut auch runden.

Wegen dem -std=c99: Das sollst *du* beim kompilieren deines Programms verwenden, nicht beim kompilieren der Mathlib.

MfG Peschmä

Keeper
02-11-2005, 20:17
Und du darfst auch auf keinen Fall das "-lm", wie schon oben gesagt, beim kompilieren vergessen. Sonst linkt er nicht gegen die Math-Library. Ein Kompilationsaufruf könnte z.B. so lauten:

gcc file.c -std=c99 -lm

MfG Keeper

EDIT: Ups, sorry bmann, das hast du ja so schon geschrieben ^^

feuervogel
02-11-2005, 22:07
hab ich alles gemacht und ausprobiert, nützt aber nichts. naja, habe mein problem jetzt halt anders gelöst.

dennoch danke für die hilfe!

Joghurt
10-11-2005, 17:08
Und du bist sicher, dass der Code genauso lautet, wie oben geschrieben? Die Meldung "implicit definition of round" deutet nämlich darauf hin, dass round nicht deklariert wurde (sprich: math.h nicht included wurde). Und dann nimm C an, dass round eine Funktion ist, die einen Integer zurückgibt, und eine nicht spezifizierte Zahl von Parametern annimmt. Das dann totales Chaos herrscht, ist klar.