1

Я использовал 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 МиБ.

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .