Registrierung Kalender Mitgliederliste Teammitglieder Suche Häufig gestellte Fragen Zur Startseite

Informatiker Board » Themengebiete » Informatik in der Schule » trunc in math.h » Hallo Gast [Anmelden|Registrieren]
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen
Neues Thema erstellen Antwort erstellen
Zum Ende der Seite springen trunc in math.h
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
kein_plan
unregistriert
trunc in math.h Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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?
09.04.2014 15:38
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Ja, das stimmt

__________________
Syntax Highlighting fürs Board (Link)
09.04.2014 18:11 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
kein_plan
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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.
10.04.2014 01:40
Karlito Karlito ist männlich
Kaiser


Dabei seit: 11.04.2011
Beiträge: 1.461

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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
10.04.2014 11:45 Karlito ist offline E-Mail an Karlito senden Beiträge von Karlito suchen Nehmen Sie Karlito in Ihre Freundesliste auf
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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.

__________________
Syntax Highlighting fürs Board (Link)
10.04.2014 17:51 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
Karlito Karlito ist männlich
Kaiser


Dabei seit: 11.04.2011
Beiträge: 1.461

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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

S. hier.

VG,

Karlito
10.04.2014 18:31 Karlito ist offline E-Mail an Karlito senden Beiträge von Karlito suchen Nehmen Sie Karlito in Ihre Freundesliste auf
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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

__________________
Syntax Highlighting fürs Board (Link)
11.04.2014 08:05 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
Karlito Karlito ist männlich
Kaiser


Dabei seit: 11.04.2011
Beiträge: 1.461

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Hallo euler,

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

VG,

Karlito
11.04.2014 08:51 Karlito ist offline E-Mail an Karlito senden Beiträge von Karlito suchen Nehmen Sie Karlito in Ihre Freundesliste auf
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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

__________________
Syntax Highlighting fürs Board (Link)
11.04.2014 11:52 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
kein_plan
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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
11.04.2014 20:07
Karlito Karlito ist männlich
Kaiser


Dabei seit: 11.04.2011
Beiträge: 1.461

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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
12.04.2014 13:45 Karlito ist offline E-Mail an Karlito senden Beiträge von Karlito suchen Nehmen Sie Karlito in Ihre Freundesliste auf
spazzpp2
Grünschnabel


Dabei seit: 10.04.2014
Beiträge: 7

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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.

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von spazzpp2: 14.04.2014 13:53.

14.04.2014 13:50 spazzpp2 ist offline Beiträge von spazzpp2 suchen Nehmen Sie spazzpp2 in Ihre Freundesliste auf
Karlito Karlito ist männlich
Kaiser


Dabei seit: 11.04.2011
Beiträge: 1.461

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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
14.04.2014 17:59 Karlito ist offline E-Mail an Karlito senden Beiträge von Karlito suchen Nehmen Sie Karlito in Ihre Freundesliste auf
kein_plan
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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

Vielen Dank für eure Tipps. smile
15.04.2014 17:20
Baumstruktur | Brettstruktur
Gehe zu:
Neues Thema erstellen Antwort erstellen
Informatiker Board » Themengebiete » Informatik in der Schule » trunc in math.h