Frage

Ich versuche, die Formel von GNU coreutil top zur Berechnung der CPU-Auslastung in Prozent zu verwenden.Aber top verwendet zur Berechnung des Prozentsatzes ein half_total, das 0,5 zum Prozentsatz hinzufügt.

In utils.c von oben Quelle, die folgende Zeile (bei 3,8 Beta1 ist sie in Zeilennummer:459):-

*out++ = (int)((*diffs++ * 1000 + half_total) / total_change);

Dies bedeutet:( (*diffs++ * 1000) / total_change ) + 1/2 Es wird also immer eine Zahl angegeben, die lautet:„10-facher Prozentsatz plus 0,5“.Wenn der Prozentsatz also x ist, wird 10x+0,5 zurückgegeben.

Kann jemand erklären, wie dieser Durchschnitt berechnet wird?Oder zumindest einen Hinweis, wo ich Hilfe bekommen kann?

PS:Warum können wir nicht einfach verwenden (*diffs++/total_change) * 100 um den erforderlichen Prozentsatz zu erhalten?

Der Quellcode von Top befindet sich unter:-http://downloads.sourceforge.net/unixtop/top-3.8beta1.tar.gz?modtime=1210117842&big_mirror=0

War es hilfreich?

Lösung

Das ist der richtige Weg Rundung für ganzzahlige Werte, da bei der Division der Bruchteil verworfen wird.

Wenn Sie den halben Divisor addieren, entspricht dies einer Gleitkommadivision und einer Aufrundung, wenn der Bruchteil 0,5 oder größer ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top