Rechenzeit

Status
Nicht offen für weitere Antworten.

Lexi

Bekanntes Mitglied
Ich habe eben ein wenig mit Addition und Multiplikation in Verbindung mit System.nanoTime() rumgespielt und etwas festgestellt, was mich ein wenig erstaunt hat.
Es macht keinen Unterschied ob ich jetzt 1+1 rechne oder ob ich 123423456*78932462 rechne, die Zeiten liegen immer im Bereich von 2000 - 2500.
Wie kommt das ? Wie rechnet Java ?

Java:
	public static void main(String[] args) {
		long time;
		long time2;
		double zahl;
		time =System.nanoTime();
		zahl = 349687596*1000000000;
		time2 = System.nanoTime();
		System.out.println(time2-time);
	}
 

Wildcard

Top Contributor
Solche Operationen sind derart rasant das die Auflösung einer solchen Timing Funktion keinesfalls ausreicht. Mit anderen Worten: Der ausgegebene Zeitwert ist Müll.
 

Lexi

Bekanntes Mitglied
d.h. Wenn ich das auf eine andere Art und Weise messe, würde man durchaus einen unterschied zwischen 1+1 und 234928*239840235 feststellen können ?
 

icarus2

Top Contributor
Ich denke das Problem ist, dass die Rechenoperation derart schnell ist, dass die Zeitberechnugn nicht schnell genug ist da ein sinnvolles Ergebnis auszugeben.


==> Die Zeit einer so schnellen Rechenoperation zu messen macht keinen Sinn.
 

Wildcard

Top Contributor
schon möglich. Microbenchmarks sind aber schwieriger als man meinen sollte und haben eigentlich auch keine Aussagekraft. Was genau möchtest du eigentlich in Erfahrung bringen?
 

Lexi

Bekanntes Mitglied
Achso.
Gibt es eine Möglichkeit die Zeit anders zu messen ?

Edit: Habe Wildcards post nicht gesehen.
Das mit der Zeit ist eigentlich eher Nebensache - auf jeden Fall das konkrete Messen und daraus resultierende konkrete Zeiten.
Mich interessierts es eher allgemein, wie Java solche Rechenoperationen durchführt.
Also, was passiert wenn sich in meinem Code 13*23 befindet. Was genau macht Java um nachher auf 299 zu kommen ?
 
Zuletzt bearbeitet:

Marco13

Top Contributor
Sowas ist fast nicht vernünftig zu messen. Selbst wenn man es 1 Million mal ausführt, weiß man nicht, was der JIT draus macht. Er könnte es einfach wegoptimieren. Insbesondere, wenn alles Konstanten sind, wird das ganze sowieso direkt zur compilezeit ausgerechnet, d.h. prinzipiell dauert ein
double x = Math.sqrt(Math.sin(Math.cos(Math.tan(Math.sqrt(42)))));
genauso lange wie ein
double x = 1;
Und die größe einer Zahl bei der gleichen Operation spielt (theoretisch) sowieso keine Rolle.
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben