§ Постановка задачи
Однажды у меня возникла задача резко и просто перевести байты в килобайты и гигабайты с петабайтами и я не имел понятия о том, как это сделать быстро, используя лишь одну математику.Сначала я копал в эту сторону
1if (size < 1024) 2 return size + " байт"; 3else if (size < 1024*1024) 4 return round(size/1024, 2) + " кб"; 5else if (size < 1024*1024*1024) 6 return round(size/1024/1024, 2) + " мб";
§ Решение
Потом я понял, что это индусское решение и решил переписать с помощью логарифмов. А что такое логарифм? Это обратное к степени действие. Так вот, поскольку числа кратны 1024, то я и решил взять количество по этому основанию:Причем тут k это целое число. Так вот, если то тогда k будет равно 0, если же то тогда же k = 1. И так далее.
В итоге я написал так (код на псевдоязыке)
1int k = log(x) / log(1024); 2int p = pow(1024, k); 3float r = round(x / p, 2); 4return r + " " + ["байт", "кб", "мб", "гб", "тб", "пб", "эб"][k];