Einfache KiB Berechnung ist falsch

kib

#1

Daten werden gelesen, count (gelesene Bytes) werden erhöht, die Zeit wird gemessen…
gelesene Bytes sollen in MiB s ausgegebenen werden, und gelesene Bytes/Sec. in KiB s!
Zudem: reelle, gelesene Bytes in KiB s!
Nun hab ich mir eine super tolle Berechnung einfallen lassen, aber die Werte sind komplett falsch:

very sscce:

long l1 = System.currentTimeMillis();
// read here, count count...
long l2 = System.currentTimeMillis();
met1("Read: " + (float) count / (1024 * 1024)
+ " - Time: " + (l2 - l1)
+ " - KiB/s: " + (float) count / (l2 - l1) / 1024f);

Verwirrt, oder braucht man mindestens 5… “Berechnungsoperatoren”?


Java Quiz
#2

Was ist met1?

Wie wäre es mit sprechenderen Variablen? count ist gut, aber l1und l2 gefallen mir nicht. millisBefore und millisAfter wären sprechender.

Was ist 12 - 11? Ach das ist l2 - l1. Nein das war jetzt nicht vorgeschoben, an einer Stelle hab ich es wirklich falsch gelesen und mich gewundert, warum da nicht einfach 1 steht…

Generell würde ich die Methodik in eine Methode auslagern und diese ausführlich testen.

Dann wäre nicht schlecht, wenn du erwähnen würdest, was rauskommt und was du erwartest, das rauskommen sollte.

Vielleicht ist die Integerdivision die Fehlerquelle. Ungetestet:

long millisBefore = System.currentTimeMillis();
// read here, count count...
long millisAfter = System.currentTimeMillis();
long millisDifference = millisAfter  - millisBefore;
float read = ((float) count) / (1024 * 1024);
float kibs = ((float) count) / millisDifference / 1024.0f;
String result = "Read: " + read 
    + " - Time: " + millisDifference 
    + " - KiB/s: " + kibs ;

#3

Ist das richtig?:

m("Read: " + count / (float) (1024 * 1024) /* nicht runden */ + " - Time: " + (t2 - t1) / 1000 /* runden */ + " - KiB/s: " + count / ((t2 - t1) / 1000f) / 1024f /* nicht runden */);

m ist eine Methode, welche was ausgibt. ( @Crian )

Es kommt heraus:

Read: 150.10939 - Time: 21 - KiB/s: 7194.9077

Mein Windows-Taschenrechner sagt aber, dass das nur 147,5 MiB s sein müssten…

Edit: Doch… es stimmt… bei einer Zeit von 21,364001008657831705054395624839 Sekunden…


#4

@Crian : Ich hab mal deine Antwort (vorerst) als gelöst hinzugefügt.


#5

Kommt denn “das Richtige” dabei raus?


#6

Ja, wenn/insofern man unter " runden" immer “abrunden” versteht.

Edit: Und die hohen Zahlen kommen dabei zustande, weil das Text ist, der durch einen GZIPInputStream gejagt wird. :blush: