java.lang.Math fehlerhaft?

Status
Nicht offen für weitere Antworten.

Donut

Bekanntes Mitglied
Wir stimmen doch alle darüber überein, dass der radiale Cosinus von 0,5pi (ca. 1,570796327) 0 ist oder?

Für Java ist es folgendes:
Code:
double wert = Math.cos(0.5*Math.PI) ;
-> Wert= 0,00000000000000006123233995736766
(also 6,123233995736766 * 10^-17)

ist die Eingabe korrekt oder hab ich da was übersehen? (rundungen etc.)
 

Tobias

Top Contributor
Das hängt mit dem Umrechnen zwischen Binär- und Dezimalsystem zusammen. java.lang.math's Antwort ist so korrekt, wie sie von einem Computer nur sein kann.

mpG
Tobias
 

Donut

Bekanntes Mitglied
müsste man mal nachrechnen :D

oder liegt es an der Begrenztheit eines double-wertes? (pi wird doch so gespeichert oder?)


edit:
dann müsste man, wenn man damit genau rechnen will eigentlich sowas gleich zu float konvertieren oder?
 

nArF

Mitglied
hehe,
ich denke es liegt einfach daran das java nicht maple ist.

ausserdem ist PI eine irrationale Zahl (nicht abbrechende dezimalzahl), aufgrunddessen kann es schon zu rundeungsfehlern kommen, denn java muss den cosinus von PI/2 ja errechnen, und weiss nciht direkt wie maple das es 0 ist.
 

baumbart

Mitglied
Mhhh
also wenn ich mich noch richtig an den Mathe-Unterricht erinnere, dann ist im rad dingens 0,5(pi) = 0 und das per definition!
Und 6,123233995736766 * 10^-17 ist einfach falsch. Okay, erst nach der 17. Nachkommastelle aber falsch ist falsch
:meld: :wink:
 
B

Beni

Gast
baumbart hat gesagt.:
Mhhh
also wenn ich mich noch richtig an den Mathe-Unterricht erinnere, dann ist im rad dingens 0,5(pi) = 0 und das per definition!
Und 6,123233995736766 * 10^-17 ist einfach falsch. Okay, erst nach der 17. Nachkommastelle aber falsch ist falsch
:meld: :wink:

Nicht ganz, denn der Computer verwendet eine andere Mathematik als ihr in der Schule.
Unter bei der numerischen Mathematik ist was richtig, wenn es nicht allzuweit vom traditionell erwarteten Resultat entfernt ist.

Zugegeben, der Maschinenfehler liegt bei ca. 2^-1074, also ist dieses Ergebnis nicht gerade überwältigend.

8) Beni :wink:
 
G

Guest

Gast
SO sollte man in der Schule rechnen
wenn du damit die Ungenauigkeit meinst die du dir bei einer Mathe Prüfung erlauben darfst...
weiß ich nur darauf hin:
2^-1074
das wird dir dein Mathelehrer verzeichen :)
 

Donut

Bekanntes Mitglied
das ist nicht allgemein so!
Ich zum beispiel genieße den Unterricht eines Physiklehrers, der die Genauigkeit der Angabe eines Ergebnisses von den Einflussgrößen abhängig macht.
Wenn eine der Variablen meinetwegen 1249,434564874754949754534564537464348735485976 wäre, wäre eine solche Abweichung bei ihm falsch

Ich frage mich nur, was er darauf erwidern würde, wenn man so ein Ergebnis auf Computer stützt ... :D
 
C

cello_

Gast
Also ich finde das sehr unbefriedigend. Natürlich werden die Zahlen im Computer diskret dargestellt, trotzdem möchte man damit richtig rechnen können und es gibt Sprachen, wo das geht! Ansonsten würden die Mathematiker, Physiker... nicht auf Computern "vertrauen". Die mathematischen Funktionen sind in JAVA anscheinend noch nicht so gut implementiert.

http://www.galileocomputing.de/openbook/javainsel3/javainsel_050002.htm
 
R

Roar

Gast
cello_ hat gesagt.:
Also ich finde das sehr unbefriedigend. Natürlich werden die Zahlen im Computer diskret dargestellt, trotzdem möchte man damit richtig rechnen können und es gibt Sprachen, wo das geht! Ansonsten würden die Mathematiker, Physiker... nicht auf Computern "vertrauen". Die mathematischen Funktionen sind in JAVA anscheinend noch nicht so gut implementiert.

http://www.galileocomputing.de/openbook/javainsel3/javainsel_050002.htm

das hat wohl weniger mit der sprache zu tun als mehr mit dem computer selbst. wenn der prozessor nicht rechnen kann dann kann die programmiersprache auch nicht mehr daran ändern als das ergebnis evtl. zu runden oder sowas. mag sein dass sich dieprogrammierer von Math was besseres einfall hätte nlassen können, aber sowas kommt nunmal vor. außerdem werden komplizierte rechnungen nicht auf irgendsonem desktop PC ausgeführt sondern mit speziell kontruierten rechnern die für sowas geschaffen sind.
 
B

bygones

Gast
cello_ hat gesagt.:
Die mathematischen Funktionen sind in JAVA anscheinend noch nicht so gut implementiert.
Naja - die mathematischen Funktionen sind nicht in Java geschrieben !! Das sind native Methoden und somit in C geproggt....
 
B

Beni

Gast
Es ist ganz einfach: entweder kannst du das Ergebnis der Rechnung schnell oder aber exakt haben.

Beides zusammen gibt es nicht, und das ist in jeder Programmiersprache so.

Diese Programme die mit symbolischer Mathematik arbeiten (Mathematica, Mapple, ... ) sind extrem langsam.
 
C

cello_

Gast
Ja,

ich hab das in der Doc auch gelesen, dass eseinen Kompromiss zwischen Performance und Genauigkeit gibt. Aber: Wozu gibt es die Klasse StrictMath?!? So wie ich das verstandne habe, werden die Funktionen von Math sowieso alle an StrictMath delegiert, weil sie noch nicht "besser" implementiert sind.

"Naja - die mathematischen Funktionen sind nicht in Java geschrieben !! Das sind native Methoden und somit in C geproggt."

Ich meinte, die Implementierung im J2SDK. Mag sein, dass die in C geschrieben sind-trotzdem könnte die Implementierung "besser" sein.
Ich möchte hier gar nicht gegen JAVA wettern (bin ja auch ein Fan ;) aber sogar mein Taschenrechner gibt mir bei cos(PI/2)= 0 aus.
Fände das schon gut, wenn es Methoden für gute Performance und Genauigkeit gäbe. Dass genaue Berechnungen nur auf Supercomputern gerechnet werden, stimmt so auch nicht. Desktop PCs sind schon ziemlich Leistungsfähig und nicht jeder Physiker kann sich mal eben einen Parallelrechner im RZ mieten.
 
G

Gast

Gast
Hallo!

Mit so genannten Big-Number packages erhält man genauere Ergebnisse. In Java gibt es da BigDecimal und BigInteger. Ich hab zwar noch nie mit denen gearbeitet, aber ich denke dass die genauere Ergebnisse liefern sollten. Ansonsten gibt es bestimmt auch andere Big-Number - Packages, die man in Java - Programmen für genauere Berechnungen verwenden kann.

Grüsse,
--Alex
 

Isaac

Bekanntes Mitglied
Jedes Programm ist nur so gut wie sein Programmierer. In diesem Fall muss man eben um diese Abweichung wissen und wenn man es genauer will eben auf andere Klasse ausweichen. Das ist kein Problem von Java oder C++ sondern eigentlich garkein Problem. Man muss es zugegebenerweise nur wissen. Mir persönlich war es bisher immer genau genug da ich Ergebnisse sowieso auf ein "normales" Mass an Kommastellen formatiert habe. Was "normal" ist etscheidet allerdings wirklich die Anwendung. Hier liegt es dann am Programmierer zu entscheiden was wichtiger ist. Auf hundert Kommastellen genau oder lieber die zur Berechnung benötigte Zeit.

Genauso wie man wissen muss das

Code:
int i = (int) 1/0;

mit voraussagbarer Warscheinlichkeit i = 2147483647 ergibt. Das ist auch "falsch". Aber der Comuter oder die Programmiersprache kann nichts dafür.
 
K

Kirsche

Gast
Ich sag nur Binärbrüche...
Jede Programmiersprache hat damit zu kämpfen, deshalb sollte man, wenn man mit double rechnet immer am schluss an den entsprechenden STellen runden.

-- kirsche
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
P Fehler: Hauptklasse Main konnte nicht gefunden oder geladen werden Ursache: java.lang.ClassNotFoundException: Main Allgemeine Java-Themen 24
urmelausdemeis Exception in thread "main" java.lang.Error: Unresolved compilation problem: Allgemeine Java-Themen 7
G java.lang.NoClassDefFoundError: org/aspectj/lang/Signature Allgemeine Java-Themen 2
P9cman java.Lang Klassen fehlen in JRE System Library Allgemeine Java-Themen 1
F Fehlermeldung: java.lang.NoClassDefFoundError: org/apache/commons/net/ntp/NTPUDPClient Allgemeine Java-Themen 6
P Swing Exception in thread "AWT-EventQueue-0" java.lang.IndexOutOfBoundsException: npoints > xpoints.length || npoints > ypoints.length Allgemeine Java-Themen 5
S Exception in thread "main" java.lang.NullPointerException at FamilienApp.main(FamilienApp.java:15) Allgemeine Java-Themen 1
E HILFE !! Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/io/FileUtils Allgemeine Java-Themen 4
J Threads - java.lang.IllegalThreadStateException Allgemeine Java-Themen 6
javaerd Binomialkoeffizient ausrechnen, Exception in thread "main" java.lang.StackOverflowError Allgemeine Java-Themen 6
T Eclipse Dll einbinden java.lang.UnsatisfiedLinkError nur in Eclipse nicht via javac Allgemeine Java-Themen 1
V Compiler-Fehler Exception in thread "AWT-EventQueue-0" java.lang.IndexOutOfBoundsException: Index: 125, Size: 125 Allgemeine Java-Themen 11
J Exception in thread "main" java.lang.NoClassDefFoundError Allgemeine Java-Themen 4
H Java Mail Fehlermeldung: java.lang.NoClassDefFoundError: javax/mail/internet/AddressException Allgemeine Java-Themen 5
Crooda Compiler-Fehler java.lang.NoClassDefFoundError bitcoinj Allgemeine Java-Themen 1
I Fehler java.lang.NullPointerException Allgemeine Java-Themen 5
L Eigenener ClassLoader wirft java.lang.NoClassDefFoundError Allgemeine Java-Themen 0
H java.lang.NullPointerException Allgemeine Java-Themen 5
L Interpreter-Fehler java.lang.NullPointerException Allgemeine Java-Themen 17
F java.lang.ClassNotFoundException: .class Allgemeine Java-Themen 5
S java.lang.NoClassDefFoundError Allgemeine Java-Themen 5
J Compiler-Fehler java.lang.StringIndexOutOfBoundsException Allgemeine Java-Themen 12
D java.lang.TypeNotPresentException Allgemeine Java-Themen 3
A java.lang.NullPointerException bei Schleife Allgemeine Java-Themen 3
L java.lang.OutOfMemoryError: Java heap space Allgemeine Java-Themen 10
S javadoc java.lang.NullPointerException Allgemeine Java-Themen 2
H java.lang.OutOfMemoryError bei der wiederholten Erzeugng von Threads Allgemeine Java-Themen 8
B Variable class in java.lang.Object Allgemeine Java-Themen 11
N java.lang.IllegalMonitorStateException: object not locked by thread before notify() Allgemeine Java-Themen 2
T ProcessBuilder (java.lang.NoClassDefFoundError) Allgemeine Java-Themen 2
T java.lang.AssertionError: Allgemeine Java-Themen 4
T java.lang.ClassCastException: Allgemeine Java-Themen 4
P Java Probleme - java.lang.Thread.run(Unkown Source) Allgemeine Java-Themen 10
B java.lang.UnsupportedClassVersionError Allgemeine Java-Themen 12
M cannot be cast to java.lang.Comparable Allgemeine Java-Themen 5
B JNI - java.lang.UnsatisfiedLinkError Allgemeine Java-Themen 21
E Interpreter-Fehler java.lang.ExceptionInInitializerError Allgemeine Java-Themen 12
C java.lang.ClassCastException Allgemeine Java-Themen 3
P Fehler beim Programmstart: java.lang.NoClassDefFound Allgemeine Java-Themen 12
T java.lang.ClassCastException Allgemeine Java-Themen 7
B Java - java.lang Allgemeine Java-Themen 12
sylo java.lang.NoSuchMethodError: Obwohl Methode vorhanden Allgemeine Java-Themen 8
MonsterBit java.lang.NullPointerException Allgemeine Java-Themen 2
H Applet java.lang.reflect.InvocationTargetException Allgemeine Java-Themen 9
M SerialPort RS232 : java.lang.NoSuchFieldError: eis Allgemeine Java-Themen 2
U java.lang.ClassNotFoundException: .jar Allgemeine Java-Themen 8
G NoClassDefFoundError: java/lang/Object Allgemeine Java-Themen 4
W java.lang.ClassCastException Allgemeine Java-Themen 10
N Exception in thread "main" java.lang.UnsatisfiedLinkError: no lwjgl in java.library.p Allgemeine Java-Themen 4
N java.lang.InstantiationException Allgemeine Java-Themen 10
J java.lang.NullPointerException bei Threadprogrammierung Allgemeine Java-Themen 9
D replaceAll => no such java.lang.NoSuchMethodError Allgemeine Java-Themen 5
G java.lang.LinkageError: loader constraints violation. Allgemeine Java-Themen 3
O java.lang.NumberFormatException für normalen integer Allgemeine Java-Themen 4
G Javadoc generiert keine Links zu java.lang Klassen? Allgemeine Java-Themen 4
Y java.lang.UnsupportedClassVersionError: Allgemeine Java-Themen 5
G java.lang.ClassCastException Allgemeine Java-Themen 3
J Fehler: java.lang.NullPointerException Allgemeine Java-Themen 2
E java.lang.outofmemory über windows-cmd ändern Allgemeine Java-Themen 6
J Folgender Fehler: java.lang.NullPointerException Allgemeine Java-Themen 4
I java.lang.UnsatisfiedLinkError: Allgemeine Java-Themen 8
J Exception in thread "main" java.lang.OutOfMemoryEr Allgemeine Java-Themen 26
J java.lang.StackOverflowError Debugging? Allgemeine Java-Themen 51
D java.lang.UnsatisfiedLinkError Allgemeine Java-Themen 5
S Fortran Funktion mit JNI aufrufen: java.lang.UnsatisfiedLink Allgemeine Java-Themen 2
S java.lang.UnsatisfiedLinkError mit JNI Allgemeine Java-Themen 6
reibi java.lang.Class - Resource - Solaris Allgemeine Java-Themen 17
S Exception in Thread "main" java.lang.NoClassDef. b Allgemeine Java-Themen 2
M java.lang.UnsupportedClassVersionError: Bad version number i Allgemeine Java-Themen 5
J java Thread java.lang.OutOfMemoryError: Java heap space Allgemeine Java-Themen 7
O "AWT-EventQueue-1" java.lang.ArrayIndexOutOfBounds Allgemeine Java-Themen 6
B Exception in thread "main" java.lang.NoClassDefFou Allgemeine Java-Themen 12
G Error: java.lang.OutOfMemoryError: Java heap space Allgemeine Java-Themen 2
S java.lang.OutOfMemoryError: Java Allgemeine Java-Themen 22
G java.lang.NullPointerException JFreeChart Allgemeine Java-Themen 5
E Java Fehlermeldung java.lang.NoClassDefFoundError Allgemeine Java-Themen 3
G Problem mit java.lang.reflect.Field Allgemeine Java-Themen 15
P Kompilerfehler: at java.lang.ClassLoader.loadClassInternal(U Allgemeine Java-Themen 16
M java.lang.NullPointerException im Chatclient Allgemeine Java-Themen 12
H java.lang.ExceptionInInitializerError Allgemeine Java-Themen 7
D java.lang.IllegalMonitorStateException: current thread not Allgemeine Java-Themen 3
P Exception in thread "main" java.lang.NoClassDefFou Allgemeine Java-Themen 3
P Exception in thread "main" java.lang.NoClassDefFou Allgemeine Java-Themen 15
P Exception in thread "main" java.lang.NoClassDefFou Allgemeine Java-Themen 3
T Profifrage: java.lang.StackOverflowError bei BigInteger Allgemeine Java-Themen 27
M java.lang.OutOfMemoryError Allgemeine Java-Themen 2
W java.lang.ClassNotFoundException Allgemeine Java-Themen 10
F java.lang.OutOfMemoryError: Java heap space Allgemeine Java-Themen 22
B Exception in thread "main" java.lang.OutOfMemoryEr Allgemeine Java-Themen 5
S fehlermeldung java.lang.OutOfMemoryError Allgemeine Java-Themen 5
B java.lang.NullPointerException Allgemeine Java-Themen 11
S Exception in thread "main" java.lang.StringIndexOu Allgemeine Java-Themen 9
H Skalieren von Image -> java.lang.OutOfMemoryError - WARUM Allgemeine Java-Themen 18
J java.lang.ArrayIndexOutOfBoundsException Allgemeine Java-Themen 2
P Hilfe zu java.lang.Object Allgemeine Java-Themen 3
K java.lang.reflect - Getter und Setter ermitteln Allgemeine Java-Themen 8
G jTable-Problem --> java.lang.OutOfMemoryError Allgemeine Java-Themen 5
G Java.lang.Compiler Allgemeine Java-Themen 3
E Exception in Thread "main" java.lang.NoClassDefFou Allgemeine Java-Themen 5
F java.lang.OutOfMemoryError Allgemeine Java-Themen 13

Ähnliche Java Themen

Neue Themen


Oben