Rzymski system zapisywania liczb

Z Wikipedii, wolnej encyklopedii
Skocz do: nawigacji, wyszukiwania

Rzymski system zapisywania liczb zwany też łacińskimaddytywny system liczbowy, w podstawowej wersji używa 7 znaków.

Historia[edytuj | edytuj kod]

System rzymski zapisywania liczb wykorzystuje cyfry pochodzenia etruskiego, które Rzymianie przejęli i zmodyfikowali ok. 500 p.n.e. Nadaje się on, co prawda, do wygodnego zapisywania liczb, jest jednak niewygodny w prowadzeniu nawet prostych działań arytmetycznych, oraz nie pozwala na zapis ułamków. Te niewygody nie występują w systemie pozycyjnym.

Rzymianie do zapisywania liczb poza siedmioma symbolami, które przetrwały do dziś, używali dodatkowo ligatur oznaczający 5000, oraz oznaczający 10000. Dodatkowo stosowano notację pozwalającą zapisywać większe liczby. Wpisanie liczby pomiędzy dwa znaki | oznaczało liczbę stukrotnie większą, a umieszczenie poziomej kreski nad liczbą oznaczało mnożenie przez 1000.

Liczby 1/2, 500 i 1000[edytuj | edytuj kod]

John Wallis w 1655 roku zaproponował użycie symbolu , oznaczającego 1000 (zamiennie z M), do oznaczania nieskończoności; później dla wygody ten symbol został zniekształcony do znaku , i od tej pory jest on stosowany w tym właśnie znaczeniu.

Liczba zero[edytuj | edytuj kod]

Moneta semis (1/2 lub 6/12 asa). Jej nominał został zapisany za pomocą litery S.

Liczba zero nie posiada własnego znaku w systemie rzymskim, gdyż "nic" nie było powszechnie uważane za wartość liczby. Wartość 0,5 jest reprezentowana przez znak S (łac. Semis - pół) oraz ł (skreślone l).

Zwyczaje typograficzne[edytuj | edytuj kod]

Rok wydania CIƆ IƆ C LXX IV (1674) na karcie tytułowej dzieł zebranych Matthiolego

W typografii XVIII-w. na kartach tytułowych książek spotykamy wariant zapisu tych liczb z zastosowaniem odwróconej litery C:

  • 1000 CIƆ (oprócz M),
  • 500 IƆ (oprócz D)

Przyjęte było także (obecnie rzadkość) oddzielanie kropką i spacją części liczby oznaczających tysiące, setki i dziesiątki z jednościami, np. M. DC. LXI = 1661.

System rzymski stosowany był w łacińskiej części Europy do końca średniowiecza. Do zapisu dat (zwłaszcza numeru roku), stosowany nawet w wieku XX (np. rok wydania książki, rok produkcji filmu).

Odejmowanie w liczbach rzymskich[edytuj | edytuj kod]

Odejmowanie przy zapisywaniu cyframi rzymskimi jak przy zapisie IV czy IX albo XC nie było popularne w zapisie stosowanym przez Rzymian, a upowszechniło się dopiero w średniowieczu.

Obecnie przyjęte jest użycie odejmowania w zapisie liczb:

IV = 4

IX = 9

XL = 40

XC = 90

CD = 400

CM = 900

Dawniej stosowano bardziej złożone odejmowania, np. w zapisie daty MDCXIC = 1689[1].

Dzisiejsze użycie liczb rzymskich[edytuj | edytuj kod]

Do dziś jest jednak używany zwyczajowo do zapisywania liczb w pewnych szczególnych przypadkach. Na przykład w Polsce zapisuje się cyframi rzymskimi: numery liceów (ale nie szkół podstawowych i gimnazjów), numery klas i lat studiów, wieki, tomy dzieł, numery pięter, wydziałów w instytucjach. Zwyczajowo zapisuje się czasami również: miesiące, rok powstania budowli (na ich frontonach) oraz numeruje rozmaite grupy klasyfikacyjne (szczególnie na ich wyższych poziomach).

Cyfry rzymskie nadal bywają wykorzystywane do oznaczania miesięcy w zapisie daty, mimo upowszechnienia się systemu opartego na cyfrach wyłącznie arabskich. Wykorzystanie zapisu rzymskiego pozwala uniknąć dwuznaczności wywołanych stosowaniem różnych wariantów kolejności poszczególnych członów w zapisie (vide np. popularny w USA sposób podawania najpierw miesięcy a potem dni wobec czego zapis „08 11 2010” może być rozumiany albo jako 8 listopada albo 11 sierpnia, natomiast zapis 8 XI 2010 można rozumieć tylko w jeden sposób; przy zapisie z udziałem cyfr rzymskich najczęściej pomija się początkowe 0 przy dniach miesiąca o wartości jednocyfrowej).

Cyfry rzymskie powszechnie stosuje się również w numeracji stuleci (np. XIX wiek — nie dotyczy to tradycji anglosaskiej, gdzie powszechnie stosuje się cyfry arabskie), w imionach władców i papieży (np. Jan Paweł II), nazwach wydarzeń historycznych (II wojna światowa).

Użycie liczby rzymskiej wskazuje czasami na liczebnik porządkowy.

Sposób zapisu[edytuj | edytuj kod]

W systemie rzymskim do zapisu liczb używa się 7 liter, z których tworzy się liczbę według podanej tabeli:

Znak Wartość
I 1
II 2
III 3
IV 4
V 5
VI 6
VII 7
VIII 8
IX 9
X 10
XX 20
XXX 30
XL 40
L 50
LX 60
LXX 70
LXXX 80
XC 90
C 100
CC 200
CCC 300
CD 400
D 500
DC 600
DCC 700
DCCC 800
CM 900
M 1 000
MD 1 500
MM 2 000

Nie istnieją znaki dla liczb większych od 1000, choć można zapisywać większe liczby poprzez zapisanie liczby mniejszej 100 razy i umieszczenie jej między '|' np.:

  • |MD| = 1500 * 100 = 150 000
  • |XL| = 40 * 100 = 4000 (zamiast MMMM)

Innym znakiem pełniącym podobną funkcję jest nadkreślenie oznaczające pomnożenie przez 1000 np.:

  • XL = 40 * 1000 = 40 000

Aby utworzyć liczbę, trzeba zestawić odpowiednie znaki, poczynając od tego oznaczającego liczbę największą do tego oznaczającego liczbę najmniejszą.

Jeżeli składnik liczby, którą piszemy, jest wielokrotnością liczby nominalnej, wtedy zapisywany jest z użyciem kilku następujących po sobie znaków, z zachowaniem zasady, by nie pisać czterech tych samych znaków po sobie (choć dawniej się jej nie stosowało), lecz napisać jeden znak wraz ze znakiem oznaczającym wartość większą o jeden rząd (liczbowy).

Sposób odczytu[edytuj | edytuj kod]

Cyfry jednakowe są dodawane, cyfry mniejsze stojące przed większymi są odejmowane od nich, cyfry mniejsze stojące za większymi są do nich dodawane.

MCLXIV = 1000(M) + 100(C) + 50(L) + 10(X) + 5(V) – 1(I) = 1164

Można spotkać zapis, w którym minimalizuje się (ogranicza) liczbę znaków. Np. 1999 to normalnie MCMXCIX, ale można również napisać MIM, choć to drugie jest już jednak modyfikacją.

Przykłady[edytuj | edytuj kod]

  • IV = 4
  • VII = 7
  • XIX = 19
  • XL = 40
  • XCV =95
  • CM = 900
  • MXXV = 1025
  • MCMXCV = 1995
  • MM = 2000
  • MCMLVI = 1956
  • MMXI = 2011
  • MMMCCCXXXVIII=3338

Geneza[edytuj | edytuj kod]

Poszczególne cyfry pochodzą od:

  • I (1) – od pionowej kreski, oznaczającej jeden element
  • V (5) – jest (górną) połową znaku X (10)
  • L (50) – jest (dolną) połową znaku C (100)
  • C (100) – z łac. centum – "sto"
  • M (1000) – z łac. mille – "tysiąc"

Być może z czasem M zostało przekształcone (lub na odwrót) w grecki znak Φ, skąd może pochodzić D (500) będące prawą połową tego znaku.

Pochodzenie znaku X (10) jest niepewne. Jedna z teorii mówi, że znak V (5) powstał na kształt otwartej dłoni, gdzie jest 5 palców a każde dwa tworzą literę V, X (10) natomiast jest zestawieniem dwóch znaków V.[potrzebne źródło]

Cyfry rzymskie w algorytmach[edytuj | edytuj kod]

Prosta implementacja konwertora do systemu rzymskiego w Javie:

public class ArabicToRomanConverter {
 
    public static Map<Integer, Character> romanLetters = new HashMap<>();
    static {
        romanLetters.put(1, 'I');
        romanLetters.put(5, 'V');
        romanLetters.put(10, 'X');
        romanLetters.put(50, 'L');
        romanLetters.put(100, 'C');
        romanLetters.put(500, 'D');
        romanLetters.put(1000, 'M');
    }
 
    public static void main(String[] args) {
        System.out.println(toRoman(3059));
    }
 
    public static String toRoman(int n) {
        if (n < 1 || n > 3999) {
            return "";
        }
        String arabic = String.valueOf(n);
        StringBuilder roman = new StringBuilder();
        for (int i = 0; i < arabic.length(); i++) {
            int digit = Character.getNumericValue(arabic.charAt(i));
            List<Integer> values = new LinkedList<>();
            if (digit == 0) {
                continue;
            } else if (digit <= 3) {
                for (int j = 0; j < digit; j++) {
                    values.add(1);
                }
            } else if (digit == 4) {
                values.add(1);
                values.add(5);
            } else if (digit == 5) {
                values.add(5);
            } else if (digit <= 8) {
                values.add(5);
                for (int j = 0; j < (8 - digit); j++) {
                    values.add(1);
                }
            } else {
                values.add(1);
                values.add(10);
            }
            int valueMultiplicator = (int)Math.pow(10, arabic.length() - i - 1);
            for (int value : values) {
                roman.append(romanLetters.get(value * valueMultiplicator));
            }
        }
        return roman.toString();
    }
}

Konwersja liczb arabskich na liczby rzymskie w PHP:

function decimal2roman($input) {
  $roman =   Array( "M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I");
  $decimal = Array(1000,  900, 500,  400, 100,   90,  50,   40,  10,   9,    5,    4,   1);
  $romanvalue = "";
  for ($i = 0; $i < 13; $i++) {
    while ($input >= $decimal[$i]) {
      $input -= $decimal[$i];
      $romanvalue .= $roman[$i];
    }
  }
  return $romanvalue;
}

Istnieje też ciekawy algorytm, napisany w Polsce (tzw. algorytm Vaxa), znacznie krótszy i szybszy. Przykładowa implementacja w Javie:

public static String rome(int liczba)
{
	if(liczba <= 0 || liczba >= 4000)
		throw new IllegalArgumentException(String.format(
			"Invalid roman number (%d), accepted range: [0,3999]", liczba));
	final String cyfryRzymskie = "IVXLCDM";
	StringBuilder rzymskie = new StringBuilder(16);
	for(int cyfra = 0, dzielnik = 5; liczba > 0; ++cyfra, dzielnik ^= 7)
	{
		int ileCyfr = liczba % dzielnik;
		liczba /= dzielnik;
		while(ileCyfr-- > 0)
		{
			int indeks = cyfra;
			if(ileCyfr > 2)
			{
				int nieparzystość = liczba & 1;
				liczba -= nieparzystość;
				indeks += nieparzystość + (ileCyfr = 1);
			}
			rzymskie.insert(0, cyfryRzymskie.charAt(indeks));
		}
	}
	return rzymskie.toString();
}

Przykładowa implementacja w PHP:

function rome($N){
	$c='IVXLCDM';
	for($a=5,$b=$s='';$N;$b++,$a^=7)
		for($o=$N%$a,$N=$N/$a^0;$o--;$s=$c[$o>2?$b+$N-($N&=-2)+$o=1:$b].$s);
	return $s;
}

Konwerter ten ma ograniczony zakres od 1 do 3999, choć w prosty sposób (np. w ostatnim algorytmie poprzez dopisanie kolejnych symboli w inicjacji zmiennej $c lub cyfryRzymskie) zakres ów można dowolnie rozszerzać.

"IIII" na tarczach zegarów[edytuj | edytuj kod]

Typowy zegar z opisem liczbami rzymskimi w Bad Salzdetfurth, Niemcy
Zegar na Bramie Shepherda w Greenwich z liczbami rzymskimi aż do XXIII (oraz 0)
Tarcza zegara Wieży Spaskiej w Moskwie z godziną czwartą oznaczoną 'IV'

Na cyferblatach zegarów opisywanych liczbami rzymskimi tradycyjnie stosuje się oznaczenie IIII dla godziny czwartej zamiast IV, co jest sprzeczne z ogólnie przyjętym systemem zapisu. Istnieje kilka wyjaśnień tego odstępstwa:

  • W wielu przypadkach zapis IIII jest stosowany jako spełnienie kanonu ustanowionego przez najstarszy istniejący zegar znajdujący się w Katedrze w Wells, który został wybudowany między 1386, a 1392 rokiem. W tym przypadku użyto zapisu IIII ponieważ był to w tych czasach powszechny sposób zapisu liczby 4 w manuskryptach (jako iiij lub iiii). W tym zegarze zastosowano niesymetryczną tarczę 24 godzinną, a do opisu minut i faz księżyca użyto cyfr arabskich, przez co teorie o symetrycznej 12 godzinnej tarczy nie mają zastosowania[2].
  • Niektórzy sądzą, że zapis IV był unikany, gdyż symbolizował rzymskiego boga Jowisza (IVPPITER). To twierdzenie przypisywane jest pisarzowi Science fiction Isaacowi Asimovowi[3]. Jest to fantazja, taki skrót dla wyrazu Iuppiter w zapisach historycznych nie występuje.[4]
  • Król Francji, Ludwik XIV wolał zapis IIII i tak kazał wykonywać zegary swoim mistrzom, a zapoczątkowany tak zwyczaj ostał się po dziś dzień[5].
  • Zapisane za pomocą standardowego zapisu dwa zestawy znaków (IV i VI oraz IX i XI) byłby podobne, co mogło by prowadzić do łatwych pomyłek ludzi nienawykłych do czytania tradycyjnych cyferblatów.
  • Forma czteroznakowa IIII stwarza wizualną symetrię tarczy wobec VIII po jej drugiej stronie.
  • Wraz z liczbą IIII w sumie na cyferblacie znajduje się dwadzieścia "I", cztery "V" i cztery "X"[6]. To oznacza, że zegarmistrz potrzebuje tylko jednej formy składającej się ze znaków VIIIIIX, która wykorzystana cztery razy daje wszystkie potrzebne do opisania tarczy znaki. Łatwo można zauważyć pewien schemat:
    • VIII I IX
    • VII III X
    • VI II IIX
    • V IIII IX
IIX i jedno IX po obróceniu o 180° tworzą XII i XI. Zapis 4 jako IV wymaga wytworzenia siedemnastu "I", pięciu "V" i czterech "X" co wymusza posiadanie więcej niż jednej formy odlewniczej.
  • Przy użyciu IIII do opisu pierwszych czterech godzin wykorzystuje się tylko "I", znak "V" występuje tylko w kolejnych czterech godzinach, a znak "X" znajduje się tylko w opisie ostatnich czterech godzin. To nadaje tarczy symetrii radialnej.

Zobacz też[edytuj | edytuj kod]

Przypisy

  1. na stronie tytułowej dzieła Tourneforta Schola botanica, Amstelaedami 1689
  2. Paul Lewis, Clocking the fours: A new theory about IIII; see the clock
  3. » Roman_Numerals
  4. A. Cappelli, Lexicon Abbreviaturarum. Dizionario di Abbreviature Latine ed Italiane (Milano, 1920, reprint 1999).
  5. W.I. Milham, Time & Timekeepers (New York: Macmillan, 1947) p. 196
  6. FAQ: Roman IIII vs. IV on Clock Dials – Donn Lathrop's page on IIII vs. IV.