Я использовал pacman
для обновления моей системы Manjaro в командной строке. Я заметил, что прогресс использует KiB для измерения количества загруженных данных. Это изменится на MiB после того, как достигнет 2048 КиБ (наиболее вероятно; время переключения с предыдущего на следующее очень мало и не может быть полностью проверено наблюдением). Мой вопрос таков: что является причиной изменения его на MiB только при 2048 КиБ, а не 1024 КиБ? Это вполне могло быть представлено как 1 МиБ.
1
1 ответ
0
Какова причина изменения его на MiB только на 2048 КиБ, а не на 1024 КиБ?
Разработчики решили закодировать это так:
/** Converts sizes in bytes into human readable units.
*
* @param bytes the size in bytes
* @param target_unit '\0' or a short label. If equal to one of the short unit
* labels ('B', 'K', ...) bytes is converted to target_unit; if '\0', the first
* unit which will bring the value to below a threshold of 2048 will be chosen.
* @param precision number of decimal places, ensures -0.00 gets rounded to
* 0.00; -1 if no rounding desired
* @param label will be set to the appropriate unit label
*
* @return the size in the appropriate unit
*/
double humanize_size(off_t bytes, const char target_unit, int precision,
const char **label)
{
static const char *labels[] = {"B", "KiB", "MiB", "GiB",
"TiB", "PiB", "EiB", "ZiB", "YiB"};
static const int unitcount = ARRAYSIZE(labels);
double val = (double)bytes;
int index;
for(index = 0; index < unitcount - 1; index++) {
if(target_unit != '\0' && labels[index][0] == target_unit) {
break;
} else if(target_unit == '\0' && val <= 2048.0 && val >= -2048.0) {
break;
}
val /= 1024.0;
}
if(label) {
*label = labels[index];
}
/* do not display negative zeroes */
if(precision >= 0 && val < 0.0 &&
val > (-0.5 / simple_pow(10, precision))) {
val = 0.0;
}
return val;
}
Источник util.c\pacman\src - pacman.git - Официальный репозиторий pacman
Это вполне могло быть представлено как 1 МиБ.
Это проект с открытым исходным кодом. Вы можете добавить запрос функции, чтобы изменить поведение или клонировать проект и изменить его самостоятельно.