2009-02-16 6 views
6

Я пытаюсь использовать формулу GNU coreutil top для расчета использования процессора в процентах. Но верхняя часть использует half_total, чтобы рассчитать процент, который добавляет 0,5 к проценту.расчет использования процессора верхней команды

В utils.c топ-х source, следующая строка (на 3,8 бета1, то в номер строки: 459): -

* вне ++ = (INT) ((* дифференциалы ++ * 1000 + half_total)/total_change);

Это приводит к: ((* дифференциалы ++ * 1000)/total_change) + 1/2 Таким образом, это всегда дает число, которое: "10 раз процент, плюс 0,5". Поэтому, если процент равен x, он вернет 10x + 0,5.

Может ли кто-нибудь объяснить, как это среднее значение рассчитано? или, по крайней мере, какой-то указатель, где я могу получить помощь?

PS: Почему мы не можем использовать (*diffs++/total_change) * 100, чтобы получить требуемый процент?

исходный код Top расположен по адресу: - http://downloads.sourceforge.net/unixtop/top-3.8beta1.tar.gz?modtime=1210117842&big_mirror=0

ответ

6

Это способ сделать округления для целочисленных значений, поскольку разделение отбрасывает дробную часть.

Когда вы добавляете половину делителя, это эквивалентно делению с плавающей запятой и округлению, если дробная часть равна 0,5 или больше.

+0

, но как насчет части «10x»? – Sabya

+0

Поскольку значение находится в десятых долях процента. – starblue