Forum: Compiler & IDEs Fkt round wird nicht gefunden, floor schon


von Anfänger (Gast)


Lesenswert?

Welche *.h Datei muss ich einbinden, dammit ich mit CodeVisionAVR die 
Round-Funktion nutzen kann?

floor(...); wird gefunden und round(...); nicht!

von Andreas P. (madmax2006)


Lesenswert?

Moin,

ist in "tgmath.h" und in "math.h" vorhanden.

Gruß

von Rolf Magnus (Gast)


Lesenswert?

Erweiterungen nicht eingeschaltet? In C89 gab es diese Funktion noch 
nicht.

von Anfänger (Gast)


Lesenswert?

math.h hab ich eingebunden, aber die Funktion round() wird trotzdem 
nicht gefunden
tgmath.h hab ich nicht

von Anfänger (Gast)


Lesenswert?

Wie kann ich die Funktion von Hand programmieren (float-Wert runden auf 
ganze Zahl)?

von Gast (Gast)


Lesenswert?

So wie du es von Hand auch machen würdest.
Nachschauen was hinter dem Komma kommt und dann entsprechend entscheiden 
ob auf oder abrunden.

von Andreas P. (madmax2006)


Angehängte Dateien:

Lesenswert?

Die Header-Datei tgmath.h ist im AVR Studio 4.16 vorhanden kannst Du 
nach einer Registrierung kostenlos downladen:

http://www.atmel.com/forms/software_download.asp?fn=dl_AvrStudio416Setup.exe

Habe die tgmath.h mal angehängt, weiß aber nicht ob sie einzubinden 
geht.

von Oliver (Gast)


Lesenswert?

Anfänger schrien:
>Welche *.h Datei muss ich einbinden, dammit ich mit CodeVisionAVR die
>Round-Funktion nutzen kann?

Andreas P. (madmax2006) schrieb:
>Die Header-Datei tgmath.h ist im AVR Studio 4.16 vorhanden...

Frage: was passt hier nicht zusammen?

Zusatzfrage: Was ist der Unterschied zwischen Headerdatei und libray, 
und wie spielen die beiden zusammen?

Zusatzfrage 2: Was steht zum Thema round() in der CodeVisionAVR-Doku?

Oliver

von Klaus (Gast)


Lesenswert?

rofl

von Mark B. (markbrandis)


Lesenswert?

Anfänger schrieb:
> Wie kann ich die Funktion von Hand programmieren (float-Wert runden auf
> ganze Zahl)?

Gast schrieb:
> So wie du es von Hand auch machen würdest.
> Nachschauen was hinter dem Komma kommt und dann entsprechend entscheiden
> ob auf oder abrunden.

Wozu so kompliziert.

1
float a = 0.71243098;
2
float b = 5.24309823;
3
4
int a_gerundet = (int)(a+0.5); /* = 1 */
5
int b_gerundet = (int)(b+0.5); /* = 5 */

Gelingt zummindest meistens ;-)

von Karl H. (kbuchegg)


Lesenswert?

>
> Gelingt zummindest meistens ;-)

@TO

Probiers aber auch mit

c = -1.2;

:-)

von Mark B. (markbrandis)


Lesenswert?

Karl heinz Buchegger schrieb:
> Probiers aber auch mit
>
> c = -1.2;
>
> :-)

Jaha gut... bei negativen Zahlen dann halt minus 0.5 :-)

1
#define ROUND(f) ( f > 0.0 ? ((int)(f+0.5)) : ((int)(f-0.5)) )

von Karl H. (kbuchegg)


Lesenswert?

Verrate ihm doch nicht alles :-)
Das Verstehen warum hier bei negative Zahlen eine andere Vorgehensweise 
notwendig ist, ist das zentrale Verständnis dessen, was bei einer 
Zuweisung double nach int wirklich passiert.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.