Rechnen mit sehr kleinen Zahlen

Hallo Leute,

bei der Programmierung einer Simulation mit Java bin ich auf ein arithmetisches Problem gestoßen. Beim Rechnen mit sehr kleinen Zahlen, wird die Division nicht korrekt durchgeführt. Hier ist mal ein Besipiel:
double test = ( 36.02/(3600000*1000));
double test2 = ( 36/(3600000*1000));

Die Variable test bekommt fälschlicherweise den Wert -5.18297770374507E-8 (also einen negativen Wert) zugeordnet und die Variable test2 bekommt den Wert 0.0 zugeordnet. Das ist aber beides nicht der richtige Wert. Es müsste ein sehr kleiner positiver Wert rauskommen. Wie kann ich das mit Java bewerstelligen, dass solche arithmetische Operationen auch die richtigen Ergebnisse liefern? Vielen Dank im Voraus für eure Hilfe.
 
Das liegt daran, dass der Nenner ein `int` ist, der überläuft. Verwende einfach:
Java:
double test = 36.02 / (3600000.0 * 1000);
double test2 = 36 / (3600000.0 * 1000);
Oder: Einige Leute (mich eingeschlossen) finden die wissenschaftliche Schreibweise für große und kleine Zahlen einfacher zu lesen (man muss nicht die Anzahl der Nulle zählen):
Java:
double test = 36.02 * 3.6E-9;
double test2 = 36 * 3.6E-9;
 
Ich nicht. Es heißt immer, Programmcode solle gesprächig sein, dann kann man die Nullen auch ausschreiben...

Weiterhin sei nicht unter den Teppich gekehrt, das man ausschließlich double Konstanten verwenden sollte, der Übersicht halber. ;)
 
Ja, das ist sicherlich Ansichtssache und auch zum größten Teil Gewohnheit, aber ich schüttel immer den Kopf, wenn ich Leute sehe, die z.B. Nanosekunden (wie sie etwa durch System.nanoTime() ausgegeben werden) in Sekunden umrechnen und dabei folgendes schreiben:
Java:
long nanos = System.nanoTime();
double seconds = nanos / 1000000000.0;
Das ist meiner Meinung nach einfach nur unnötig. Nano = 10^-9, also doch bitte auch:
Java:
long nanos = System.nanoTime();
double seconds = nanos * 1E-9;
Und 1E-9 ist doch nun wirklich sehr viel sprechender (das schreit ja geradezu "Neun Nullen nach dem Dezimalpunkt!") als 1000000000.0.....
 
Was hältst du von 1_000_000_000.0 ? :D

... System.out.println(1_000_000_000.0); gibt 1.0E9 aus und schont mMn. etwas die Augen.

Aber ich verstehe deinen Punkt... Das ist so ähnlich wie der IBAN-Wahnsinn.
 
Passende Stellenanzeigen aus deiner Region:

Oben