2009-02-16 11 views
6

Estoy tratando de usar la fórmula de GNU coreutil top para calcular los usos de la CPU en porcentaje. Pero arriba usa un medio_total para calcular el porcentaje, que agrega 0.5 al porcentaje.cálculo de uso de la CPU del comando superior

En utils.c de la parte superior de source, la línea siguiente (al 3,8 beta1, es en número de línea: 459): -

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

Esto se traduce en: ((* diffs ++ * 1000)/total_change) + 1/2 lo tanto, siempre da un número, que es: "10 veces el porcentaje, más 0,5". Entonces, si el porcentaje es x, devolverá 10x + 0.5.

¿Alguien puede explicar cómo se calcula este promedio? o al menos algún puntero donde puedo obtener la ayuda?

PS: ¿Por qué no podemos simplemente usar (*diffs++/total_change) * 100 para obtener el porcentaje requerido?

código fuente de Top se encuentra en: - http://downloads.sourceforge.net/unixtop/top-3.8beta1.tar.gz?modtime=1210117842&big_mirror=0

Respuesta

6

Esta es la manera de hacer redondeo para valores enteros, debido a que la división descarta la parte fraccionaria.

Cuando agrega la mitad del divisor, esto es equivalente a una división de punto flotante y redondear si la parte fraccionaria es 0.5 o mayor.

+0

pero ¿qué pasa con la parte "10x"? – Sabya

+0

Porque el valor está en décimas de un porcentaje. – starblue