Java System.out.println problem

Man Arbeitet hauptsächlich mit Integer-werten bzw. mit ganzzahligen Werten.
Einfach darum, weil Double-Werte (80 Bit) weit aus größer sind, als Integer-werte (32 Bit).
Auch entstehen bei Double-werten Probleme, die nicht unbedingt trivial sind. Da Double-werte fließkommazahlen sind, können Ungenauigkeiten entstehen.
1.0 - 1.0 muss nicht immer gleich exakt 0 sein. Wenn man Pech hat bekommt man z.B. als Ergebnis 0.0000000001. Darum sollte man auch Double-Wert nicht gegen 0 prüfen. Sondern gegen eine definierte Konstante. Unter C wäre das z.B. 1E−9 (definiert in der Float.h).

Wenn man also nur einen ganzzahligen Wert benötigt, ist es unsinnig, ein Double-Wert dafür zu nehmen, weil das nur nachteilige Probleme mit sich zieht.
 
Und eigentlich ist C(++) für solche genauen Berechnungen sowieso ungeeignet und man setzt Fortran ein, oder C(++) mit Wrappern für Fortran.

Ihr scheint eine sehr komische Vorlesung zu haben...
C(++) ist nunmal hauptsächlich eine Integersprache und daran ist sie besser als es Fortran ist.
Sie ergänzen sich in gewisser Weise.
 
Mein prof sagte mir nicht," hey, wir nehmen nur noch double oder float werte" ich kenne schon die unterschiede zwischen den einzelnen größen(byte, short, int usw.), das einzige was mir nicht bewusst war dass es bei so simplen berechnungen , wie bei mir, ein problem geben könnte wegen dem double, in der aufgabe stand was von Int, ich nahm aber double.

Und wieso sprichst du von C(++)? wir lernen im ersten semester java und vhdl, danach kommt C.
 
orioon schrieb:
Und eigentlich ist C(++) für solche genauen Berechnungen sowieso ungeeignet und man setzt Fortran ein, oder C(++) mit Wrappern für Fortran.

Ihr scheint eine sehr komische Vorlesung zu haben...
C(++) ist nunmal hauptsächlich eine Integersprache und daran ist sie besser als es Fortran ist.
Sie ergänzen sich in gewisser Weise.


Selten so einen Blödsinn gelesen.
 
Dann erklär mich doch mal bitte warum?
(Wirst zu aber zu 99% nicht hinbekommen weil es Unfug ist oder wir reden aneinander vorbei)

Es gibt KEIN EINZIGES kommerziell eingesetztes programm das solche Berechnungen durchführen soll und in reinem C geschrieben ist. (von Sprachenverblendeten Programmierern sehe ich jetzt mal ab)
Ich denke an sowas wie Wetterdienste, physikalische Berechnunen, und und und...

Ich bin selbst C Programmierer und liebe die Sprache. aber für starke Gleitkommaberechnugen ist sie LANGSAM gegenüber Fortran und co. und da kannst du auch mit Compileroptimierungen nicht viel rausholen im Vergleich.
Jede Programmiersprache hat Nachteile, diese sollte man erkennen können.
Dies bügelt man aus indem man komplett eine andere Sprache nutzt oder zumindest Inlinde Code über Wrapper etc.

Viele Sprachen haben eine Daseinsberechtigung. Und C und Fortran wird noch eine sehr lange Zeit eine parallele haben :)

Ich rede hier konkret von double precision etc.
Das muss in C einfach ausgedrückt simuliert werden, während es Fortran nativ umsetzen kann, dafür wurde die Sprache schließlich auch entwickelt.

Edit:
Folgendes Beispiel zeigt das Problem wunderbar:
Fortran: double complex
C: struct{double dr; double di;} (Realisierung über Struct wo 2 doubles zusammengesetzt werden sollen.. Datentyp wird nicht nativ unterstützt -> langsam)
 
Zuletzt bearbeitet:
orioon schrieb:
Edit:
Folgendes Beispiel zeigt das Problem wunderbar:
Fortran: double complex
C: struct{double dr; double di;} (Realisierung über Struct wo 2 doubles zusammengesetzt werden sollen.. Datentyp wird nicht nativ unterstützt -> langsam)

Dann nimm unter C ein long double...
 
long double = 80bit...

du siehst: auch nicht das Wahre ;)

C ist für sowas einfach nicht gemacht und man arbeitet um das Problem herum.
Für wissenschaftliche Zwecke ist das nichts.
 
orioon schrieb:
long double = 80bit...

Und Complex ist nur 64 Bit groß. Im Grunde ist Complex auch nur ein zusammengebastelter Datentyp aus zwei Real Datentypen (Real*8).

http://de.wikibooks.org/wiki/Fortran:_Fortran_95:_Datentypen
http://earth.uni-muenster.de/~joergs/doc/fortran_kurs/sprache/ftn633.html

Nebenbei gemerkt, dass nur die wenigsten Befehlssätze, die für die FLOPs zuständig sind, eine höhere Genauigkeit als 64 Bit aufweisen. Selbst die SSE-Befehlssätze behandeln Fließkommazahlen, die eine höhere Genauigkeit als 64 Bit haben, als 2 * 64 Bit Werten.
Demzufolge gibt es auch Compiler Optimierungen, die exakt dies machen.
Spezielle C Compiler für PowerPCs erweitern den long double Datentyp als 2 * double.

Also ist deine Aussage schlichtweg falsch.
 
Zurück
Oben