trunc in math.h

Neue Frage »

Auf diesen Beitrag antworten »
kein_plan trunc in math.h

Meine Frage:
Hallo,
ich bin gerade auf die Rundungsfunktion trunc() in math.h in C gestoßen.

Die Erklärungen, was diese Funktion macht, habe ich nicht ganz verstanden.

Meine Ideen:
Ich vermute, dass diese Funktion eine Zahl auf eine ganze Zahl rundet, und zwar auf die ganze Zahl, die näher an 0 ist.

Stimmt das?
 
Auf diesen Beitrag antworten »
eulerscheZahl

Ja, das stimmt
Auf diesen Beitrag antworten »
kein_plan

OK, dann mal noch eine Frage:

Wie genau benutze ich diese Funktion?
Ich hab' mal ein Beispiel mit floor und ceil gemacht, da funktioniert alles:
php:
1:
2:
3:
4:
5:
6:
7:
8:
#include<stdio.h>
#include<math.h>

int main()
{ 
      printf("%f %f"floor(2.5), ceil(2.5));
      return 0;
}


Wenn ich jetzt aber statt floor trunc schreibe, dann steht da "Der Bezeichner ist nicht definiert."
Was mache ich da falsch?

Und noch was: Gibt es da irgendwo eine Rundungsfunktion für "kaufmännisches Runden"? (Also aufrunden, wenn nach dem Komma 5, 6, 7, 8 oder 9 steht, und Abrunden bei 0, 1, 2, 3 oder 4)
Ich könnte mir sowas auch schnell selbst schreiben, aber es wäre ja ganz praktisch, wenn's da schon eine fertige Funktion gibt.
Auf diesen Beitrag antworten »
Karlito

Hallo,

irgendwie ist das Problem ein Windows-Problem, Ich habe es im Visual Studio mit dem MS-Compiler auch nicht hinbekommen. Habe aber auch relativ schnell aufgegeben.

Unter Linux mit gcc läuft es problemlos. Deswegen mein Vorschlag: entweder ein Linux benutzen (virtuelle Maschine oder direkt) oder MinGW um den gcc unter Windows benutzen zu können.

Alternativ einfach die äquivalenten C++ Funktionen benutzen.

VG,

Karlito
 
Auf diesen Beitrag antworten »
eulerscheZahl

Also, Visual Studio 2013 macht, was es machen soll.
Ich habe aber schon öfter Unterschiede zwischen Visual Studio und gcc festgestellt, speziell, was das Abstürzen von Programmen angeht.

Für das "kaufmännische Runden" ist mir nichts bekannt.
Auf diesen Beitrag antworten »
Karlito

Die Funktion Round sollte eigentlich kaufmännische Runden. Eventuell jedoch gebunden an C99.

S. hier.

VG,

Karlito
Auf diesen Beitrag antworten »
eulerscheZahl

Erwartet man dann bei round(-5.5) nicht eine -5? Gemäß der von dir verlinkten Seite erhält man ja eine -6.
Auf diesen Beitrag antworten »
Karlito

Hallo euler,

laut wikipedia ist kaufmännisches Runden genau das was man herkömmlich als Runden versteht...

VG,

Karlito
Auf diesen Beitrag antworten »
eulerscheZahl

Ok, dann hatte ich da was durcheinandergebraucht, ich dachte, Kaufleute würden immer zur nächstgrößeren Zahl runden.
Danke fürs Berichtigen.
Auf diesen Beitrag antworten »
kein_plan

Zitat:
Original von eulerscheZahl
Also, Visual Studio 2013 macht, was es machen soll.


Bis jetzt hatte ich es immer in Visual Studio 2012 getestet. Jetzt habe ich mir mal Visual Studio 2013 installiert, und da geht alles: trunc und round (das hatte in 2012 beides nicht funktioniert).

Wieso gehen diese beiden Funktionen denn erst in der neuen Version? verwirrt
Auf diesen Beitrag antworten »
Karlito

Hi,

bei den Versionen 2010 und 2012 gab es soweit ich weiß irgendwelche Probleme mit der Implementierung der Programmierumgebung für C/C++. So funktionierte auch die Syntaxvervollständigung nicht richtiig. Ich vermute, dass in VS2008 auch alles in Ordnung wäre. Ist aber nur eine Vermutung.

Vielleicht findest du hier hier noch genauere Informationen.

Edit: Ich habe auf meinen Windows-Systemen atm auch nur VS2010, deswegen ist es bei mir auch fehlgeschlagen. Für C verwende ich lieber Linux und für C++ eine andere Programmiersprache, solange ich die Wahl habe Augenzwinkern

VG,

Karlito
Auf diesen Beitrag antworten »
spazzpp2

Prinzipiell zu den Rundungsfunktionen:

Weil Python unter der Haube mit C-Code funktioniert, hier eine einfache Zusammenfassung in Python:

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
>>> import math
>>> a = [3.4, 3.5, 3.6]
>>> methods = [math.floor, math.ceil, math.trunc, round, int]
>>> for m in method:
...     print m, map(m, a)
<built-in function floor> [3.0, 3.0, 3.0]
<built-in function ceil> [4.0, 4.0, 4.0]
<built-in function trunc> [3, 3, 3]
<built-in function round> [3.0, 4.0, 4.0]
<type 'int'> [3, 3, 3]


Hier wende ich einfach jede der Rundungsfunktionen auf eine Liste [3.4, 3.5, 3.6] an.

C sollte unabhängig von den VS-Versionen die selben Ergebnisse liefern, weil C standardisiert ist.
Auf diesen Beitrag antworten »
Karlito

Hallo spazzpp2,

Zitat:
Original von spazzpp2
C sollte unabhängig von den VS-Versionen die selben Ergebnisse liefern, weil C standardisiert ist.


Sollte es und ist es bestimmt auch. Deswegen macht das Tool VS jedoch trotzdem Probleme. Ich hatte auch verschiedenen Optionen probiert um das o.g. Programm zum laufen zu bekommen. Jedoch ohne Erfolg. Und weitere Zeit wollte ich nicht investieren.

VG,

Karlito
Auf diesen Beitrag antworten »
kein_plan

Wie gesagt, in VS2013 läuft es. Und das reicht mir auch erstmal.

Vielen Dank für eure Tipps. smile
 
Neue Frage »
Antworten »


Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »