Boyut sayısını KiB'den MiB'ye değiştirdikten sonra indirin.


1

Kullanıyordum pacman Manjaro sistemimi komut satırında güncellemek için. İlerlemenin indirilen veri miktarını ölçmek için KiB kullandığını fark ettim. Bu, 2048 KiB'ye ulaştıktan sonra MiB'ye geçer (büyük olasılıkla; öncekinden diğerine geçen zaman çok küçüktür ve gözlemle tamamen doğrulanamaz). Sorum şu: 1024 KiB değil, sadece 2048 KiB'de MiB olarak değiştirmenin nedeni nedir? Çok iyi 1 MiB olarak sunulabilirdi.


@DavidPostill, soruyu basitçe bekletmek yerine nasıl daha iyi hale getirebileceğime dair bazı işaretçiler (belirli; şablon değil) verirseniz, size yardımcı olacaktır.
Gaurav Joseph

2
Belirgin teknik nedenlerin kısaca, kararlarla ilgili sorular niye ya Bir program belirli bir şekilde çalışırsa spekülasyonları çekmesi olasıdır. ancak Açık kaynaklı yazılımlar söz konusu olduğunda, bunlar kutu Mesaj göndermeyi, e-posta listesi tartışmalarını, IRC günlüğünü ya da geliştiriciden gelen ifadeyi açıklayan kod yorumu ile kesin olarak cevaplanmalıdır (en sonuncusu da OS yazılımına özel değil!)
bertieb

Yanıtlar:


0

1024 KiB değil, sadece 2048 KiB'de MiB olarak değiştirmenin nedeni nedir?

Geliştiriciler bu şekilde kodlamaya karar verdi:

/** 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;
}

Kaynak util.c \ pacman \ src - pacman.git - Resmi pacman deposu


Çok iyi 1 MiB olarak sunulabilirdi.

Bu açık kaynak kodlu bir projedir. Davranışı değiştirmek veya projeyi klonlamak ve kendiniz değiştirmek için bir özellik isteği ekleyebilirsiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.