Z3 od Konráda Zuse byl první funkční programovatelný počítací stroj. Byl postaven z 2600 relé. Z toho 2000 relé pro paměť a 600 relé pro aritmetickou jednotku. V paměti mohlo být 64 slov dlouhých 22 bitů. Frekvenci hodinového signálu měl 5,3 Hz a délku slova 22 bitů[1]. Rychlost sčítání 0,8 s a rychlost násobení 3 s. Jeho spotřeba byla 4000 wattů a vážil 1000 kg. Výpočty počítač prováděl v binární soustavě a pracoval s čísly s plovoucí desetinnou čárkou. Z3 četl programy z děrovaného filmu.
Stroj byl dokončen a 12. května 1941 úspěšně předveden vědcům z DVL (německy Deutsche Versuchsanstalt für Luftfahrt, česky Německý výzkumný ústav letectva) v Berlíně[2]. Roku 1943 byl původní Z3 zničen při bombardování Berlína spojenci. V roce 1960 byla postavená plně funkční replika Z3 společností Konráda Zuse „ZuseKG“. Tato replika je vystavena v Deutsches Museum v Mnichově. V roce 1998 úspěšně zvládl test Turingovo-vyčíslitelných funkcí a byl označen za turingovsky úplný[3][4].
Z3 byl používán za nacistické vlády v Německém výzkumném ústavu letectva pro statickou analýzu vibrací křídla letadla[5].
Počítač Z3 byl řízen programem na rozdíl od prvního počítače sestrojeného v roce 1623 Wilhelmem Schickardem. Počítač Z3 byl úspěšný díky použití jednoduché dvojkové soustavy, kterou o tři století dříve vymyslel Gottfried Leibniz a Boole ji později použil pro svoji Booleovu algebru. V roce 1937 napadlo Claude Shannona z MIT (Massachusettský technologický institut) aplikovat Booleovu algebru na elektronická relé při návrhu digitálních obvodů v jeho seminární práci o číslicové technice. Avšak až Zuse (aniž by znal práci Claude Shannona z MIT) prakticky propojil obě myšlenky v programovém řízení Z3.
První programovatelný počítač navrhl britský matematik Charles Babbage v roce 1830 a nazval ho Analytical Engine. První elektronické číslicové počítače byly vyrobeny ve Velké Británii a nazývaly se Colossus[6]. Bylo jich 10 a sloužily k lámání kódů. Pro jejich výrobu byly použity elektronky. Počítaly ve dvojkové soustavě a programovaly se pomocí propojovacích polí a přepínačů. Vývoj těchto počítačů byl několik desetiletí utajován, a proto nebyly dlouho uváděny v historii vývoje počítačů jako první. ENIAC byl dokončen až po válce. Obsahoval elektronky, programoval se pomocí přepínačů a používal desítkovou soustavu. Do roku 1948 se programoval stejně jako Colossus.
Z3 měl uložený program na externí pásce, takže při výměně programu nebylo nutné znovu ručně přenastavit propojovací pole. Prvními počítači na světě s programem uloženým v paměti uvnitř počítače byly Manchester Small-Scale Experimental Machine z roku 1948 a EDSAC (anglicky Electronic Delay Storage Automatic Calculator) z roku 1949. Zavedení koncepce paměti programu uvnitř počítače je papírově přisuzováno od roku 1945 John von Neumannovi a jeho kolegům. Nicméně o tomto konceptu se již roku 1936 zmiňuje sám Konrad Zuse, avšak jeho patent byl zamítnut.
Název počítače | Uveden do provozu | Číselná soustava | Mechanismus počítače | Programování | Turing-complete |
---|---|---|---|---|---|
Zuse Z3 (Německo) | Květen 1941 | Binární | Elektromechanické | Řízený programem na děrované filmové pásce | Ano (1998) |
Atanasoff–Berry Computer (USA) | Léto 1941 | Binární | Elektronické | Neprogramovatelný, jednoúčelový | Ne |
Colossus (UK) | Leden 1944 | Binární | Elektronické | Řízený programem – propojovací kabely a přepínače | Ne |
Harvard Mark I - IBM ASSC (USA) | 1944 | Decimální | Elektromechanické | Řízený programem – 24 děr na papírové děrné pásce (žádné podmíněné větvení) | Ano (1998) |
ENIAC (USA) | Listopad 1945 | Decimální | Elektronické | Řízený programem – propojovací kabely a přepínače | Ano |
Manchester Small-Scale Experimental Machine (UK) | Červen 1948 | Binární | Elektronické | Řízený programem uloženým ve Williamsově trubici | Ano |
Upravený ENIAC (USA) | Září 1948 | Decimální | Elektronické | Řízený programem – propojovací kabely a přepínače plus primitivní nepřepisovatelný program používající tabulky funkcí (podobné jako ROM) | Ano |
EDSAC | Květen 1949 | Binární | Elektronické | Řízený programem uloženým ve Williamsově trubici a drum (bubnové) magnetické paměti | Ano |
Manchester Mark I | Říjen 1949 | Binární | Elektronické | Řízený programem uloženým ve rtuťové paměti se zpožďovací linkou (anglicky Delay line memory) | Ano |
CSIRAC (Austrálie) | Listopad 1949 | Binární | Elektronické | Řízený programem uloženým v paměti se zpožďovací linkou | Ano |
Z3 fungoval jako zásobníkový počítač ovšem pouze se dvěma registry R1 a R2. První instrukce čtení načetla hodnotu z paměti do R1, druhá instrukce čtení načetla hodnotu z paměti do R2. Aritmetická instrukce počítala s R1 a R2, výsledek zapsala do R1 a smazala obsah R2. Další instrukce čtení by četla do R2. Zapisovací instrukce by do paměti uložila hodnotu z R1, vymazala R1 a další čtení by proběhlo do R1.
Kód | Příkaz | Popis | Délka (cyklů) |
---|---|---|---|
11·zzzzzz | Pr z | Načíst z paměti z nejdřív do R1, hned poté do R2 | 1 |
10·zzzzzz | Ps z | Zapsat R1 do paměti z | 0–1 |
01·110000 | Lu | Pozastavit a načíst desítkové číslo z klávesnice do R1 | 9–41 |
01·111000 | Ld | Pozastavit a zobrazit desítkově R1 | 9–41 |
01·100000 | La | Součet: R1 ← R1 + R2; R2 ← 0 | 3 |
01·101000 | Ls | Rozdíl: R1 ← R1 – R2; R2 ← 0 | 4–5 |
01·001000 | Lm | Násobení: R1 ← R1 × R2; R2 ← 0 | 16 |
01·010000 | Li | Dělení: R1 ← R1 / R2; R2 ← 0 | 18 |
01·011000 | Lw | Odmocnina: R1 ← √(R1); R2 ← 0 | 20 |
1: díra, 0: „nedíra“, zzzzzz: adresa paměti (0-63), ·: vodící díra
Na Z3 bylo možné v vytvářet smyčky (slepením začátku a konce pásky), avšak nebyla k dispozici žádná instrukce podmíněného skoku. I přes to se v roce 1998 podařilo Raúlu Rojasovi ukázat, že je možné na něm implementovat Turingův stroj[3][4]. V závěru své práce uvádí že z pohledu abstraktní teoretické perspektivy je počítačový model Z3 rovnocenný počítačovému modelu současných počítačů. Ale z praktického pohledu se od dnešních počítačů liší.
Z pragmatického hlediska je důležité, že Z3 poskytl docela praktickou instrukční sadu pro řešení typických inženýrských problémů 40. let minulého století. Zuse byl stavební inženýr, který stavěl počítače pro usnadnění své práce.
Cílem je převést následující pseudokód s podmíněnými skoky na sekvenci matematických operací, které uměl Z3. Ukázka vychází z důkazu Raúla Rojase, pouze je otočena logika koeficientů .
if x == 3: b = a * c else if x == 4: c = b / a else: a = b + c
Předchozí kód lze bez změny funkčnosti přepsat následovně:
if x == 3: a = a b = a * c c = c else if x == 4: a = a b = b c = b / a else: a = b + c b = b c = c
Nebo též:
a = (x != 3 && x != 4) ? b + c : a b = (x == 3) ? a * c : b c = (x == 4) ? b / a : c
Pro podmínky (x == 3)
a (x == 4)
lze zavést koeficienty Tb
a Tc
, které jsou buď 1 (podmínka splněna) nebo 0 (podmínka nesplněna). Koeficient Ta
lze vypočítat jako negaci logického součtu Tb
a Tc
, respektive jako součin negací. Pak bude možné převést výpočet následovně:
Ta = (1 - Tb) * (1 - Tc) a = Ta * (b + c) + (1 - Ta) * a b = Tb * (a * c) + (1 - Tb) * b c = Tc * (b / a) + (1 - Tc) * c
Pokud se porovnává (x == 3)
a uvažují se pro jednoduchost 4bitová celá čísla, tedy (x == 0b0011)
, tak lze porovnat jednotlivé bity x
(dále značené ) s negovaným číslem 3
(tedy 0b1100
) a vypočítat tak koeficient Tb
:
Analogicky koeficient Tc
pro podmínku (x == 4)
, respektive (x == 0b0100)
(takže inverzně 0b1011
):
Koeficient vyjde 1 právě tehdy, když všechny bity x
budou různé od příslušných bitů negovaného čísla v podmínce (a tedy stejné jako všechny příslušné bity původního čísla v podmínce).
Je zřejmé, že převáděním podmíněných skoků na matematické sekvence tímto způsobem se enormně prodlouží program i doba výpočtu.