Hallo,
ich habe mal aus Spaß ein wenig in Java rumgespielt und dabei ist mir eine eigenartige Sache aufgefallen die ich mir nicht wirklich erklären kann.
Hier erstmal der Code:
Die Console liefert mir folgende Ergebnisse:
Die Methode Vari1 und Vari2 unterscheiden sich nur in der Angabe des Zielwertes in der inneren for-Schleife. Bei Vari1 verweise ich direkt auf Integer.MAX_VALUE-1 und in Vari2 übergebe ich eine eigene Integer Variable der der Wert von Integer.MAX_VALUE-1 zugewiesen wurde, was eigentlich nichts am Berechnungsaufwand ändert. ...aber aus irgend einem Grund ist die benötigte Zeit für die Schleifendurchläufe unterschiedlich (s. Consolenausgabe).
--> Hat jemand eine Erklärung dafür?^^
Schonmal vielen Dank im Voraus.
MfG Framework
ich habe mal aus Spaß ein wenig in Java rumgespielt und dabei ist mir eine eigenartige Sache aufgefallen die ich mir nicht wirklich erklären kann.
Hier erstmal der Code:
Java:
public class TestFloat {
public static void main(String[] args)
{
Vari1();
System.out.println("-----");
Vari2();
}
private static void Vari1()
{
System.out.println("### Vari1 ###");
long lStartTime, lEndTime, lCount = 0;
float f1 = 0.123456789f, f2 = 0.123456789f, f3 = 0;
int iEnd2 = Integer.MAX_VALUE - 1, iLoops = 10;
long[][] lResult = new long[iLoops][2];
for (int i1 = 0; i1 < iLoops; i1++)
{
lStartTime = System.currentTimeMillis();
for (int i2 = 0; i2 <= Integer.MAX_VALUE - 1; i2++)
{
f3 = f1 * f2;
lCount++;
}
lEndTime = System.currentTimeMillis();
lResult[i1][0] = lEndTime - lStartTime;
lResult[i1][1] = lCount;
}
for(int i = 0; i < lResult.length; i++)
{
System.out.printf("Loop: %d -> %d ms (lCount = %d)\n", i, lResult[i][0], lResult[i][1]);
}
}
private static void Vari2()
{
System.out.println("### Vari2 ###");
long lStartTime, lEndTime, lCount = 0;
float f1 = 0.123456789f, f2 = 0.123456789f, f3 = 0;
int iEnd2 = Integer.MAX_VALUE - 1, iLoops = 10;
long[][] lResult = new long[iLoops][2];
for (int i1 = 0; i1 < iLoops; i1++)
{
lStartTime = System.currentTimeMillis();
for (int i2 = 0; i2 <= iEnd2; i2++)
{
f3 = f1 * f2;
lCount++;
}
lEndTime = System.currentTimeMillis();
lResult[i1][0] = lEndTime - lStartTime;
lResult[i1][1] = lCount;
}
for(int i = 0; i < lResult.length; i++)
{
System.out.printf("Loop: %d -> %d ms (lCount = %d)\n", i, lResult[i][0], lResult[i][1]);
}
}
}
Die Console liefert mir folgende Ergebnisse:
Code:
### Vari1 ###
Loop: 0 -> 66 ms (lCount = 2147483647)
Loop: 1 -> 37 ms (lCount = 4294967294)
Loop: 2 -> 47 ms (lCount = 6442450941)
Loop: 3 -> 37 ms (lCount = 8589934588)
Loop: 4 -> 33 ms (lCount = 10737418235)
Loop: 5 -> 38 ms (lCount = 12884901882)
Loop: 6 -> 34 ms (lCount = 15032385529)
Loop: 7 -> 34 ms (lCount = 17179869176)
Loop: 8 -> 34 ms (lCount = 19327352823)
Loop: 9 -> 34 ms (lCount = 21474836470)
-----
### Vari2 ###
Loop: 0 -> 48 ms (lCount = 2147483647)
Loop: 1 -> 540 ms (lCount = 4294967294)
Loop: 2 -> 538 ms (lCount = 6442450941)
Loop: 3 -> 537 ms (lCount = 8589934588)
Loop: 4 -> 539 ms (lCount = 10737418235)
Loop: 5 -> 535 ms (lCount = 12884901882)
Loop: 6 -> 536 ms (lCount = 15032385529)
Loop: 7 -> 536 ms (lCount = 17179869176)
Loop: 8 -> 537 ms (lCount = 19327352823)
Loop: 9 -> 537 ms (lCount = 21474836470)
Die Methode Vari1 und Vari2 unterscheiden sich nur in der Angabe des Zielwertes in der inneren for-Schleife. Bei Vari1 verweise ich direkt auf Integer.MAX_VALUE-1 und in Vari2 übergebe ich eine eigene Integer Variable der der Wert von Integer.MAX_VALUE-1 zugewiesen wurde, was eigentlich nichts am Berechnungsaufwand ändert. ...aber aus irgend einem Grund ist die benötigte Zeit für die Schleifendurchläufe unterschiedlich (s. Consolenausgabe).
--> Hat jemand eine Erklärung dafür?^^
Schonmal vielen Dank im Voraus.
MfG Framework