Rád bych uvedl svůj pohled na používání předpon u jednotek v IT. Jedná o tolik oblíbené téma bouřlivých diskusí na téma MB a MiB.
Troška historie
Předpony jednotek SI jsou založeny na desítkové soustavě: k (kilo) znamemá 1000 nebo také 103, M (mega) znamená 1000000 = 106, G (giga) 1000000000 = 109 atd. Tento systém předpon vnikal někdy kolem 1790. Jsou to předpony založené na 10x.
V IT se používá dvojková soustava. Důvody jsou pochopitelné, rozlišit od sebe dva napěťové stavy je triviální a navíc je dvojková soustava výhodná co se týče úspornosti kódování (nejúspornější by potom byla trojková soustava).
Dvojková soustava se používá i pro adresování. Pomocí 10 linek můžeme adresovat 210 = 1024 jednotek, pomocí 20 linek 220 = 1048576 jednotek atd. Odtud vznikly předpony používané v IT. Kilobajt se začal označovat jako KB (pozor na ono velké K, v SI je kilo malé k). Tedy kB = 1000B a KB = 1024B. Potud je ještě vše v pořádku, IT začalo používat předponu, která nekolidovala s žádnou jinou.
Jak šel čas, začaly se používat i předpony další a to už chybně M označoval 1048576, což je špatně, protože M je předpona SI pro 1000000. A na chaos bylo zaděláno.
Tento chaos dokládá i kapacita diskety: 1.44 MB disketa má kapacitu zapsanou v podivné jednotce MB = 1024000 B (1.44*1024*1000). Zde už tedy výpočet nesedí ani z pohledu binárních jednotek ani z pohledu desítkových.
Problém je, že odchylka mezi desítkovou předponou a binární předponou pro větší násobky roste. Zatímco pro kilo se jedná o 2%, pro mega 5%, pro giga 7% a pro tera už o 10%. Tedy, pokud se pro kilo dá klidně psát, že kB se skoro rovná KB (nebo kiB) 1000 ~ 1024, tak pro vyšší předpony už toto představuje větší chybu.
Asi největší rozruch způsobili výrobci pevných disků, když místo v IT zaběhnutých předpon začali kapacity svých disků psát v desítkových násobcích. Ale jak bylo uvedeno výše, zmatek v hodnotách předpon začal mnoho let před tím.
Můj pohled na věc
Podle mého názoru bylo zásadní chybou používat násobky SI (k, M, G…) s jinou, než od roku 1790 běžnou mocninou desíti. Začalo to relativně dobře, kdy pro 1024 byla použita předpona K (což se ale může také snadno plést s malým k). Bylo by štastnější, kdyby se od začátku používaly předpony zcela nekolidující s SI. Tedy například ony ki. Mi, Gi označující předpony založené na mocninách dvou.
Předpony jednotek se při výpočech mohou snadno krátit (vzpomeňte si na hodiny fyziky). Nenapadá mě žádný rozumný IT výpočet, snad někoho napadne v diskusi, tak si vymyslím ne až tak praštěný příklad. Výpočet rychlosti zpracování dat za takt. Mějme zařízení běžící na frekvenci 10MHz zpracovávající data rychlostí 100MB/s (nebo též 100MBHz). Můžeme tedy psát:
Toto vymyšlené zařízení zpracovává data rychlostí 10B za jeden takt časovače. Nebo ne? Pokud je jako M myšleno „ajťácké“ 1048576 pak krácení M v čitateli s „úplně jiným M“ ve jmenovateli nelze provést a výpočet je chybný. Proto je nutné používat stejné hodnoty pro stejné předpony. A asi nebudeme pro frekvenci (a tedy i měření času) používat binární násobky, že ne.
Předchozí případ nebyl vůbec nereálný. Kosmická sonda Mars Climate Orbiter v roce 1999 havarovala k vůli rozdílným jednotkám používaných v jednom projektu (jedno střediskou používalo anglosaskou míru a druhé metrickou) . Tato chyba stála asi 330 milionů amerických dolarů. (Ok, vím, zde se nejedná o předpony, ale o úplně jiné jednotky, i tak se jednalo o nejdražší chybu tohoto typu.)
Jak z toho ven
Předpony jednotek SI jsou mezinárodně dané a měli by se bezpodmínečně dodržovat. Pokud jsou pro danou oblast tyto jednotky nevhodné, je třeba zvolit jiné, nekolidující. Pro binární mocniny jsou to Ki, Mi, Gi atd.
V psaném textu není problém psát MiB. V hovoru asi nikdo nebude říkat mibibajt, to ani nejde vyslovit, ale v hovoru stejně málokdy sdělujeme přesné údaje, spíše je běžné zaslechnout: „Koupil jsem si terový disk.“ To, že má 930GiB si lze sdělit potom. Ostatně, i dva různé „terové disky“ mohou mít různý počet 512B sektorů (nedej bože 4kiB sektorů, prostě jiný počet bajtů), takže pro přesný výpočet je nutné vzít skutečnou hodnotu.
Což je vlastně i návod, jak tento problém řešit. Všechny programy například na dělení disku (fdisk
, parted
, lvm
atp.), zjisťování velikostí souborů (ls
) apod, umějí zobrazit a pracovat s velikostí určenou v přesných hodnotách na bajt. Tedy, kdykoliv je to skutečně nutné, je možné získat přesný údaj i přes to, že tyto programy často vytváří zmatek při nesprávném použití hodnot SI předpon).
Stále platí příklad s oním krácením. I když jsem za celou svou praxi nezažil jedinný výpočet tohoto typu (ale na druhou stranu už jsem zažil zmatek při zmenšování systémů souborů a oddílů disků), jde o princip. Běžně se používají předpony pro označení frekvence (GHz), rychlosti přenosu (GT/s – giga transfers per second) a vedle toho kapacity v GB. Není žádný důvod, proč by G u GB mělo mít jinou hodnotu než u GHz.
S tou sondou nás strašil už doktor Skoupil na druhé přednášce paradigmat programování, pamatuješ? ;-) Je to zmatek, já považuju za jedinou pravdivou hodnotu tu co ukazuje fdisk.
Tak tohle si nevybavuji. O tom se ale píše snad v každé historii kosmických letů.
Bohužel i ten fdisk (alespoň tedy některé verze) je nutné přepnout do units a dos non compatible, jinak to píše a hlavně dělá posunuté oddíly. Resp, je nutné se ujistit, v jakých jednotkých to vlastně píše.