PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Grenzen in float.h und limits.h



08-09-2000, 10:53
Hallo zusammen,

wie zu sehen versuche ich mich nun doch erst mal mit C. Dazu gleich mal ein paar grundlegende Fragen zu den Grenzen in Headerdateien.

So wie ich das sehe stellen die mit dem Compiler gelieferten Bibliotheken oder genauer eben die beiden angesprochenen Headerdateien Grenzwerte für bestimmte Variablentypen bereit. Diese sind doch dann sicher Systemabhängig, d. h. der Compiler für ein bestimmtes System stellt die Werte über die Programmierung da auf einen "Standart", oder?

Wieso gibt es denn zwei Dateien, eine für die Gleitkommatypen und eine für den Rest? Steckt da eine Systematik drin?

Und dann sind da noch die Angaben von z. B. FLT_EPSILON, FLT_DIG, etc.
Was bezeichnet da denn was. Das ...MAX die Obergrenze sein muß und eben ...MIN die untere scheint mir ja einzuleuchten, aber da gibt es neben den oben erwähnten Konstanten auch z. B. ...BIT! Kann mir jemand das alles mal nach dem Schema "Wat is en Dampfmaschin" erklären?

Ein C Buch habe ich schon bestellt, arbeite aber bis dahin mit nem Tutorial und da steht nicht alles bis ins letzte Detail drin - sprich danach werden meine Fragen hoffentlich weniger!

Danke

Stefan

11-09-2000, 16:35
Hi,

soviel ich noch weis stehen die Max und Min's in der Headerdatei limits.h.

Diese Werte sollte man auf jedenfall nicht ändern da die Min und Max sich aus der Bytegrösse der Variablen berechnen und somit fest Einkompiliert ist.

Brauchbar sind sie z.B wenn man ein long auf int umwandeln will aber verhindern will das eine zu grosse long die int Variable zum überlauf bringt.

Beispiel

# include <limits.h>
// Weitere include's

long foo;
int baa;

if (foo < INT_MAX) {
baa=foo;
}
else {
printf "foo ist zu gross!";
}

So oder so ähnlich.

Bei float.h wird hauptsächlich für die Mathematik und Naturwissenschaft gebracht. Beim Kaufmännischem Rechnen benutzt man meistens Integer (da genauer) und selten Float Variablen. Aber um erlich zu sein weis ich auch nicht was die meisten dieser Definitionen beteutet.

Die Byte Konstanten sind die Grössen der einzelnen Variablentypen in Byte, die braucht man da bei verschiedenen Kompilern oder Platformen die grösse der Variabeln schwanken. Zum beispiel wird glaube ich die grösse einer int Variablen mit Minimal 2 Byte angesehen, meisten jedoch hat sie 4 Byte. Char hat immer 1 Byte und Long Minial 4 (Kann falsch sein da aus meinem Gedächtnis). Wenn du also vorsichtig Programmieren willst musst du solche Dinge überprüfen!

Naja, ich hoffe ich konnte dir einmal helfen.

Bis Bald

Henning Wackernagel

12-09-2000, 00:40
hallo stefan,

schoen dass du dran bleibst. deine ersten bemerkungen zu headerdateien sind richtig. in limits.h stehen grenzwerte genauso in float.h fuer bestimmte variablentypen oder makros. in h-dateien deklariert man funktionsprototypen, externe variablen, typedef-anweisungen usw. damit macht man dem compiler etwas bekannt. z.b. eine funktion, die du im hauptprogramm main() aufrufst, die der compiler aber noch nicht kennt und die vielleicht noch in einer 3.datei func.c ablaeuft. du schreibst z.b. den befehl printf("..."); irgendwas an die standardausgabe deines pc's. der compiler kennt printf nicht (ist uebrigens eine funktion) und quittiert dir das mit meckern. er meckert nur nicht wenn du ihm sagst:
#include <stdio.h>
in dieser h-datei steht u. a. die funktion stdio(standard ein- u. ausgabe)
und ihre uebergabeparameter und ihr rueckgabewert. stimmen deine werte im programm nicht mit den in der stdio.h deklarierten ueberein, so erhaelst du einen fehler.
stelle dir das so vor als ob auf der strasse ein schild steht, nur fuer pkw bis 2,0 tonnen. es duerfen also nur autos fahren, die diese bedingungen erfuellen, 40 tonner lkw duerfen nicht fahren.

was die einzelnen von dir genannten makros bedeuten kann ich dir auch nicht sagen. veraenderungen solltest du an diesen dateien nicht vornehmen, es sei denn, du weist genau, was du tust. sind auf den verwendeten compiler abgestimmt.

viel spass mit c --;-)

13-09-2000, 10:35
Danke für die Infos!!! Ich komme sicher gelegentlich auf Dich zurück Franky!

Gruß

Stefan