Rechnen mit sehr kleinen Zahlen

Status
Nicht offen für weitere Antworten.

michaelb

Aktives Mitglied
Hallo,

ich muss in meinem Programm mit sehr kleinen Zahlen rechnen. Es geht um Physik. So kommt natürlich auch 1,602*10-19 vor. Damit das ganze genau wird verwende ich BigDecimal, da Double viele Rundungsfehler reingemacht hatte. Gibt es Alternativen zu BigDecimal? Kann man .add und so nicht als + und so schreiben, weil es bei komplexeren Formeln leicht übersichtlich wird?

MfG, Michael
 
G

Gast

Gast
Doch, es gibt ein paar Bibliotheken, leider fallen mir die Namen gerade nicht ein. Musst mal googlen. Ab Java 7 werden auch + und - bei BigDecimal funktionieren.
 

michaelb

Aktives Mitglied
Hallo,

gegoogelt hab ich schon recht oft und hab wenig gefunden :(
Es funktioniert zwar mit BigDecimal aber sieht halt nicht so toll aus...
Ist es richtig, dass Double nur auf 17 Stellen genau ist?

MfG, Michael
 
G

Gast

Gast
kleine faktoren machen eigentlich nichts. problematisch wirds nur, wenn sehr kleine faktoren mit sehr grossen kombiniert werden.

dafür gibts halt bigdecimal. sieht zwar nicht ganz so schön aus, aber dafür bleibt die genauigkeit erhalten. würd mir darüber keine gedanken machen.
 

Marco13

Top Contributor
"Auf 17 Stellen" klingt eben irreführend (und es scheint, als hätte es das bei dir auch bewirkt). Es geht nicht um die Anzahl der Nachkommastellen, sondern um die Anzahl der signifikanten Stellen - und da ist bei 17 Schluss. Intern werden double-Werte ja immer (grob) gespeichert als
1.XXXXXXXXXXXXXXXX * 2^Y
(siehe http://en.wikipedia.org/wiki/IEEE_754)
D.h. man kann 17 Stellen speichern, aber es ist "egal, wo sie sind". Zur Verdeutlichung:
Code:
  0.0000000000000000000000000123  ( = 1.23 * 10^-27 )
+ 0.0000000000000000000000000123  ( = 1.23 * 10^-27 )
= 0.0000000000000000000000000245  ( = 2.46 * 10^-27 )
- kein Problem, obwohl man bei >17 Nachkommastellen rumrechnet.
Code:
  0.0000000000000000000000000123  ( = 1.23 * 10^-27 )
+ 1.0                             ( = 1.0 * 10^0 )
= 1.0                             ( = 1.0 * 10^0 )
Weil die Zahl
1.0000000000000000000000000123
mehr als 17 signifikante Stellen hat.
 

michaelb

Aktives Mitglied
Hey,

danke! werd mir mal den Link genauer anschauen bzw. den Inhalt der Seite, auf die gelinkt ist.

MfG, Michael
 

Marco13

Top Contributor
Aber ob man sowas wie
sk = (sk - 1 + yk)(1 + k)
= [sk - 1 + (xk - ck - 1) (1 + k)](1 + k)
= [(sk - 1 - ck - 1) - kck - 1](1+k)
ck = [{sk - sk - 1}(1 + k) - yk](1 + k)
= [{((sk - 1 - ck - 1) - kck - 1)(1 + k) - sk - 1}(1 + k) + ck - 1(1 + k)](1 + k)
= [{(sk - 1 - ck - 1)k - kck-1(1 + k) - ck - 1}(1 + k) + ck - 1(1 + k)](1 + k)
= [(sk - 1 - ck - 1)k(1 + k) - ck - 1(k + k(k + k + kk))](1 + k),
sk - ck = ((sk - 1 - ck - 1) - kck - 1) (1 + k)
- [(sk - 1 - ck - 1)k(1 + k) - ck - 1(k + k(k + k + kk)](1 + k)
= (sk- 1 - ck - 1)((1 + k) - k(1 + k)(1 + k))
+ ck - 1(-k(1 + k) + (k + k(k + k + kk)) (1 + k))
= (s- 1 - ck - 1) (1 - k(k + k + kk))
+ ck - 1 - [k + k + k(k + kk) + (k + k(k + k + kk))k]
wirklich nachvollziehen muss, um zur EInsicht zu gelangen, dass double nicht beliebig genau ist, sei mal dahingestellt :wink:
 

Wildcard

Top Contributor
Aber der Link funktioniert erstaunlich gut um zu verdeutlichen, dass Gleitkommazahlen eine komplexe Thematik sind :wink:
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
P Rechnen mit sehr kleinen Zahlen Allgemeine Java-Themen 5
JAnruVA Datentypen Berechneten String-Wert in Double umwandeln um weiter zu rechnen Allgemeine Java-Themen 7
Mikejr Recursion mit Zinseszins rechnen Allgemeine Java-Themen 20
B Parameter Konstruktor plus rechnen Allgemeine Java-Themen 6
KeexZDeveoper Schnelleres Rechnen Allgemeine Java-Themen 8
J-Gallus Erste Schritte Wahrscheinlich Anfänger Fehler beim rechnen. Falsches Ergebnis. Allgemeine Java-Themen 9
A Mit dem letzten bis zum ersten Wert aus Array rechnen Allgemeine Java-Themen 15
M Probleme beim rechnen, bei Zahlen mit führenden Nullen. Allgemeine Java-Themen 7
J zu blöd zum rechnen Allgemeine Java-Themen 7
F Taschenrechner Term rechnen Allgemeine Java-Themen 4
S Java rechnen mit unbekannten Allgemeine Java-Themen 11
M Rechnen mit kleinen Zahlen langsamer!? Allgemeine Java-Themen 11
B Fehler beim Rechnen mit Floats Allgemeine Java-Themen 3
B Rechnen mit mehreren Variablen Allgemeine Java-Themen 2
M In einer Tabelle rechnen Allgemeine Java-Themen 12
H Mit String rechnen Allgemeine Java-Themen 14
hdi Probleme beim Rechnen mit BigDecimal Allgemeine Java-Themen 5
E Konstante Zahl Threads parallel rechnen lassen Allgemeine Java-Themen 6
O "Rechnen" mit Farben Allgemeine Java-Themen 12
T Mit Datum und Zeit rechnen Allgemeine Java-Themen 8
G Probleme mir Rechnen Allgemeine Java-Themen 5
P rechnen mit extrem grossen zahlen Allgemeine Java-Themen 2
H Komplexes Rechnen mit Java Allgemeine Java-Themen 6
S Rechnen mit float Zahlen Allgemeine Java-Themen 2
O Java zu blöde um 1-1 zu rechnen?? Allgemeine Java-Themen 20
B Sehr großen Graph mit Verbindungen bauen und minimieren? Allgemeine Java-Themen 35
javamax2000 Sehr sonderbares Verhalten Allgemeine Java-Themen 6
B Welcher Datentyp für sehr große Zahlenbereiche? Allgemeine Java-Themen 1
R JDK installieren OpenJDK-Aufruf sehr langsam Allgemeine Java-Themen 4
Thallius String erzeugen sehr langsam Allgemeine Java-Themen 16
D Verwaltung von sehr vielen Objekten Allgemeine Java-Themen 12
S JNLP startet seit 1.8.0_31 sehr langsam + Windows-Systemverzeichnis Allgemeine Java-Themen 3
Creylon Java verursacht sehr starkes ruckeln Allgemeine Java-Themen 5
N Bin to Dez und umgekehrt mit sehr großen Zahlen Allgemeine Java-Themen 2
T Gleiche Operation dauert teilweise sehr lange Allgemeine Java-Themen 12
M Externe Jar sehr langsam Allgemeine Java-Themen 23
M JUnit & Multithreading - sehr seltener Fehler Allgemeine Java-Themen 3
H Sehr viele Threads effizient Verwalten Allgemeine Java-Themen 13
J Laden von JAR Files geht ohne ADMIN Rechte sehr langsam Allgemeine Java-Themen 6
H Kopieren sehr langsam Allgemeine Java-Themen 5
B Cipher.getInstance Aufruf sehr langsam Allgemeine Java-Themen 2
nrg Arbeiten mit sehr großen CSV Dateien Allgemeine Java-Themen 20
K replaceAll bei sehr großen String Allgemeine Java-Themen 3
B Eingabemaske Komponenten aktivieren, funktionert nicht (sehr kurios) Allgemeine Java-Themen 2
hdi Heap Sapce Error bei sehr großem String Allgemeine Java-Themen 5
G RXTX library braucht sehr lange zum laden. Ist das normal? Allgemeine Java-Themen 8
L Java 1.5 - Anwendung unter 1.6 JRE sehr langsam geworden Allgemeine Java-Themen 8
O Speicherverbrauch von Java / VM sehr hoch? Allgemeine Java-Themen 27
G Lesen von sehr großen dateien Allgemeine Java-Themen 8
M String zusammensetzen->sehr langsam Allgemeine Java-Themen 3
G Sehr sehr merkwürdige Ereignisse mit Fibonacci Programm Allgemeine Java-Themen 6
G Sehr gutes Java-Framework(Gui-Builder) auf XML-Basis gesucht Allgemeine Java-Themen 21
E String.replace für (sehr) großen Text Allgemeine Java-Themen 9
T [SVNKit] Commit sehr langsam. Allgemeine Java-Themen 7
G Arraylist statt List - Sehr schlimm? Allgemeine Java-Themen 8
F JAVA Applikationen starten sehr langsam Allgemeine Java-Themen 14
D Datei öffnung sehr langsam Allgemeine Java-Themen 17
G Neue Warenwirtschaft aber sehr langsam! Allgemeine Java-Themen 3
H Entpacken sehr langsam Allgemeine Java-Themen 10
Bleiglanz Benchmarks sind sehr schwierig Allgemeine Java-Themen 2
turmaline OOP zwei gleiche Methoden mit kleinen Unterschieden Allgemeine Java-Themen 15
Developer_X Brauche Hilfe bei meinem kleinen hilfsprogramm Allgemeine Java-Themen 4
E verstehe fehler bei meinem (kleinen) programm nicht Allgemeine Java-Themen 5

Ähnliche Java Themen

Neue Themen


Oben