Serwis Edukacyjny
w I-LO w Tarnowie
obrazek

Materiały dla uczniów liceum

  Wyjście       Spis treści       Wstecz       Dalej  

Autor artykułu: prof. Raúl Rojas

©2021 mgr Jerzy Wałaszek
I LO w Tarnowie

Algorytmy numeryczne

SPIS TREŚCI
Podrozdziały

W tym rozdziale opiszemy algorytmy zmiennoprzecinkowe używane przez komputer Z3. Bez wyjątku są to te same algorytmy, które stosują sekwencyjne procesory zmiennoprzecinkowe [Koren 93].

Wyjątki zmiennoprzecinkowe

Jednym z problemów zapisu zmiennoprzecinkowego jest to, iż muszą być stosowane specjalne konwencje dla liczby zero. Z3 rozwiązuje ten problem i obsługuje inne wyjątki (nadmiar, niedomiar)3 dzięki monitorowaniu wartości wykładnika po wykonaniu każdej operacji arytmetycznej lub odczycie danych z pamięci. Do przechwytywania wyjątków służy specjalny układ, który sprawdza stan magistrali Ae. Każda liczba z wykładnikiem równym -64 jest oznaczana jako zero: przekaźnik o symbolu Nn1 jest ustawiany na 1, jeśli liczba taka jest umieszczona w parze rejestrów <Af,Bf>. Jeśli znajduje się ona w parze rejestrów <Ab,Bb>, to na 1 ustawiany jest przekaźnik Nn2. W ten sposób zawsze wiemy, czy jeden lub oba argumenty operacji arytmetycznej mają wartość zero. Coś podobnego jest robione dla wykładnika o wartości 63 (zgodnie z konwencją jest to liczba nieskończona). W tym przypadku są ustawiane na 1 przekaźniki Ni1 lub Ni2 zgodnie z parą rejestrów, w której ta liczba się znajduje.

Operacje zawierające "wyjątkowe" liczby (zero lub nieskończoność) są wykonywane w zwykły sposób, lecz wynik zostaje unieważniony przez nasz wścibski obwód. Załóżmy dla przykładu, iż zostało wykonane mnożenie i pierwszy argument ma wartość zero (Nn1 jest ustawiony na 1). Obliczenia są przeprowadzane normalnie, lecz w każdym cyklu nasz układ tworzy wynik o wartości -64 na wyjściu z sumatora części A. Nie ma znaczenia, jakie operacje są wykonywane na mantysach, ponieważ wykładnik wyniku jest ustawiony na -64 i dlatego końcowym wynikiem jest zero. Dzielenie przez liczbę nieskończoną może być obsłużone w podobny sposób. Z3 potrafi wykryć nieoznaczone operacje typu 0/0, obrazek, obrazek oraz 0 x obrazek. We wszystkich tych przypadkach zapala się odpowiednia lampka sygnalizacyjna wyjątku na panelu wyjścia i maszyna jest wstrzymywana. Z3 zawsze tworzy poprawny wynik, gdy jeden z argumentów ma wartość zero lub obrazek, a drugi jest liczbą w dozwolonym zakresie5.

Dodatkowy obwód sprawdza wartość wykładnika wyniku na wyjściu sumatora wykładników. Jeśli wykładnik ten jest większy lub równy 63, to występuje nadmiar i wynik musi przybrać wartość obrazek. Jeśli wykładnik jest mniejszy od -64, to występuje niedomiar i wynik musi przybrać wartość 0. Aby to wykonać, ustawiany jest na 1 odpowiedni przekaźnik (Nn1 lub Ni1).

Konradowi Zuse udało się zaimplementować obsługę wyjątków przy użyciu zaledwie kilku przekaźników. Ta cecha Z3 jest najbardziej elegancką cechą w całym projekcie. Wiele z wczesnych mikroprocesorów z lat 1970-tych nie obsługiwało wyjątków i pozostawiało je zmartwieniu oprogramowania. Podejście Konrada Zuse jest bardziej rozsądne, ponieważ uwalnia ono programistę od nudnego sprawdzania zakresu liczb przed każdą operacją.

Na początek:  podrozdziału   strony 

Dodawanie i odejmowanie

Aby dodać lub odjąć dwie liczby zmiennoprzecinkowe, ich zapis należy zredukować do tego samego wykładnika. Po wykonaniu tej czynności wystarczy dodać lub odjąć mantysy. Jeśli wykładniki różnią się, to mantysa mniejszej liczby jest przesuwana w prawo o potrzebną liczbę miejsc (wykładnik jest odpowiednio zwiększany, aby liczba nie zmieniała swojej wartości) aż oba wykładniki będą sobie równe. Może się oczywiście zdarzyć, iż po wykonaniu 17 przesunięć w prawo mniejsza liczba stanie się równa zero.

Znaki tych dwóch liczb są porównywane przed wykonaniem operacji. Jeśli zażądano dodawania i znaki są takie same, to jest wykonywane dodawanie. Jeśli znaki są różne, to wykonywane jest odejmowanie. Jeśli zażądano odejmowania a znaki są różne, to wykonywane jest dodawanie. Jeśli znaki są takie same, wykonywane jest odejmowanie. Specjalny obwód ustawia znak wyniku zgodnie ze znakami argumentów i znakiem wyniku.

Dodawanie i odejmowanie sterowane jest przez łańcuch przekaźników (a nie przez tarczę sterującą) ponieważ wymagana maksymalna liczba cykli jest niska. Rysunek 8 pokazuje synchronizację wymaganą przy dodawaniu dwóch liczb. Początkowo argumenty dodawania są przechowywane w parze rejestrów <Af,Bf> i <Ab,Bb>. W pierwszym cyklu odejmuje się wykładniki. W cyklu 2 mantysa z większym wykładnikiem jest umieszczana w rejestrze Ba, a mantysa z mniejszym wykładnikiem trafia do rejestru Bb. Mantysa w rejestrze Bb jest przesuwana w prawo o ilość pozycji równą różnicy wykładników (obsługa wyjątków troszczy się o przypadek, gdy mniejsza liczba staje się równa zero po wykonaniu przesunięcia).

W etapach I, II i III cyklu 2 mantysy są dodawane i w końcu procesor sprawdza, czy wynik jest większy od 2. Jeśli tak, to mantysa zostaje przesunięta o jedną pozycję w prawo, a wykładnik zwiększony o 1. Zwróćmy uwagę, iż test "jeśli (Be >= 2)" w części A modułu arytmetycznego jest wykonywany po  obliczeniu Be w części B podczas etapów I, II i III cyklu 2.

W przypadku odejmowania jest potrzebne cztery lub pięć cykli. Rys.9. pokazuje niezbędną synchronizację przy odejmowaniu. Pierwsze dwa cykle są prawie identyczne z pierwszymi dwoma cyklami algorytmu dodawania, lecz obecnie mantysy są odejmowane. Cykl 3 jest wykonywany tylko, gdy różnica mantys jest ujemna. W efekcie cyklu 3 mantysa wyniku zostaje liczbą dodatnią. Cykl 4 jest bardzo ważny: różnica dwóch znormalizowanych mantys może mieć dużo zer na pierwszych pozycjach bitowych po lewej. Wynik jest normalizowany przez przesuwanie Be w lewo o tyle miejsc, ile jest konieczne (wykonywane jest to przez rejestr przesuwny pomiędzy buforem przekaźników Fd a rejestrem Bb). Liczba jednobitowych przesunięć odejmowana jest od wykładnika w części A  procesora. W cyklu 5 wynik zostaje umieszczony w parze rejestrów <Af, Bf>.

cykl etap wykładnik mantysa
0 I, II, III    
1 IV, V Aa:=Af  
I, II, III Ae:=Aa-Ab Be:=0+Bb
2 IV,V jeśli (Ae>=0), Ab:=0; Aa:=Af
inaczej Aa:=0;
jeśli (Ae>=0), Ba:=Bf; Bb:=Be (przesunięte)
inaczej Ba:=Be; Bb:=Bf (przesunięte)

(Be lub Bf są przesuwane o |Ae| pozycji w prawo)

I, II, III jeśli (Be>=2), Ae:=Aa+Ab+1
inaczej Ae:=Aa+Ab
Be:=Ba+Bb
3 IV, V Af:=Ae jeśli (Be>=2), Bf:=Be/2;
inaczej Bf:=Be

Rys.8.  3 cykle potrzebne dla algorytmu dodawania. Argumenty dla dodawania są umieszczane w parach rejestrów <Af,Bf> i <Ab,Bb> przed rozpoczęciem operacji.

cykl etap wykładnik mantysa
0 I, II, III    
1 IV,V Aa:=Af  
I, II, III Ae:=Aa-Ab Be:=0+Bb
2 IV, V jeśli (Ae>=0), Ab:=0; Aa:=Af
inaczej Aa:=0
jeśli (Ae>=0), Ba:=Af, Bb:=Be (przesunięte)
inaczej Ba:=Be; Bb:=Bf (przesunięte)

(Be lub Bf są przesuwane o |Ae| pozycji w prawo)

I, II, III Ae:=Aa+Ab Be:=Ba-Bb
3 IV,V Aa:=Ae; Ab:=0 Ba:=0; Bb:=Be
I, II, III Ae:=Aa+Ab Be:=Ba-Bb
4 IV, V Aa:=Ae
Ab:=liczba pozycji przesunięć
Bb:=Be (przesunięte)

(Be jest normalizowany przez przesuwanie w lewo)

I, II, III Ae:=Aa-Ab Be:=0+Bb
5 IV, V Af:=Ae Bf:=Be

Rys.9.: Cykle 4-5 potrzebne w algorytmie odejmowania. Przed wykonaniem operacji pierwszy argument umieszczany jest w parze rejestrów <Af,Bf> a drugi w <Ab,Bb>.

Na początek:  podrozdziału   strony 

Mnożenie

Algorytm mnożenia w Z3 jest podobny do algorytmu ręcznego mnożenia liczb dziesiętnych, tj. opiera się on na powtarzających się dodawaniach mnożnej zgodnie z poszczególnymi cyframi mnożnika. Na początku tego algorytmu pierwszy argument zostaje umieszczony w parze rejestrów <Af,Bf>. Drugi argument umieszcza się w parze rejestrów <Ab,Bb>. Tymczasowa para rejestrów <Aa,Ba> jest zerowana. Rysunek 10 pokazuje mikrosekwencje utworzone przez tarczę mnożenia w jednostce sterującej. Wykonanie algorytmu zajmuje 16 cykli. Zwróćmy uwagę, iż są używane jedynie bity mnożnej od pozycji -14 do pozycji 0. Wykładniki są dodawane w pierwszym cyklu a wynik jest używany później w pętli w części A modułu arytmetycznego. Mantysy są obsługiwane w części B tego modułu. Rejestr Ba zawiera wynik częściowy obliczeń. Podstawowe pętla mnożenia posiada następującą postać:

Ba:=Be/2
Be:=Ba + Bb x (i-ty bit Bf)
dla i = -14,...,0

Wynik częściowy Be jest przesuwany o jedną pozycję w prawo w celu obliczenia Ba:=Be/2. Wykonywane jest to za pomocą rejestru przesuwnego podłączonego do bufora przekaźnikowego Fc.

Wynikiem mnożenia jest liczba 1 <= r < 4 (dla argumentów leżących w zakresie). W ostatnim cyklu następuje sprawdzenie, czy r >=2. Jeśli tak, to wynik zostaje przesunięty o jedną pozycję w lewo i do wykładnika wyniku dodana zostaje liczba 1.

cykl etap wykładnik mantysa
0 I, II, III    
1 IV, V Aa:=Af  
I, II, III Ae:=Aa+Ab jeśli (Bf[-14]=1), Be:=Ba+Bb
inaczej Be:=Ba
2 IV, V Aa:=Ae, Af:=0, Ab:=0 Ba:=Be/2
I, II, III Ae:=Aa+Ab jeśli (Bf[-13]=1), Be:=Ba+Bb
inaczej Be:=Ba
3 IV, V Aa:=Ae Ba:=Be/2
I, II, III Ae:=Aa+Ab jeśli (Bf[-12]=1), Be:=Ba+Bb
inaczej Be:=Ba
4 ... ... ...
i IV, V Aa:=Ae Ba:=Be/2
I, II, III Ae:=Aa+Ab jeśli (Bf[i-15]), Be:=Ba+Bb
inaczej Be:=Ba
14 ... ... ...
15 IV, V Aa:=Ae Ba:=Be/2
I, II, III jeśli (Be>=2), Ae:=Aa+1 jeśli (Bf[0]=1), Be:=Ba+Bb
inaczej Be:=Ba
16 IV, V Af:=Ae jeśli (Be>=2), Bf:=Be/2
inaczej Bf:=Be;
Bb:=0;

Rys.10.: 16 cykli potrzebnych dla algorytmu mnożenia. i-ty bit rejestru Bf oznaczony jest jako Bf[i]. Przed wykonaniem operacji mnożenia pierwszy argument jest umieszczany w parze rejestrów <Af,Bf> a drugi w parze <Ab,Bb>.

Na początek:  podrozdziału   strony 

Dzielenie

Algorytm dzielenia jest podobny do algorytmu mnożenia, lecz zamiast dodawania stosowane jest wielokrotne odejmowanie. Na początku algorytmu dzielna umieszczana jest w parze rejestrów <Af,Bf>. Dzielnik umieszczany jest w parze rejestrów <Ab,Bb>. Tymczasowa para rejestrów <Aa,Ba> jest zerowana. Rysunek 11 pokazuje mikrosekwencje tworzone przez tarczę dzielenia modułu sterującego. Wykonanie algorytmu zajmuje 18 cykli.

Główna idea algorytmu jest bardzo prosta. Wykładnik wyniku jest otrzymywany przez odjęcie wykładników dzielnej i dzielnika. A teraz dla mantysy: załóżmy, iż chcemy obliczyć x/y  dla mantys x  oraz y. Ponieważ mamy do czynienia z liczbami znormalizowanymi, pierwszą cyfrą wyniku jest 1, jeśli x>=y, a zero, jeśli x <y. W pierwszym przypadku ustawiamy pierwszą cyfrę wyniku na 1 i obliczamy resztę, która wynosi x-y. Reszta ta jest rekursywnie dzielona przez y. Aby to wykonać, jest ona przesuwana o jedną pozycję w lewo i nowy bit wyniku wprowadzony zostaje na pozycję [-1] rejestru Bf (unieważniając w ten sposób efekt przesunięcia). Jeśli bitem wynikowym jest zero, to reszta wynosi po prostu x  i rekursywne dzielenie kontynuowane jest jak w pierwszym przypadku. Podstawowa pętla dzielenia posiada następującą postać:

Ba:=2 x Be 
jeśli (Ba-Bb >= 0) to Be:=Ba-Bb, Bf[i]:=1 
inaczej Be:=Ba; Bf[i]:=0
dla i=0,...,-14

Wynik częściowy Be jest przesuwany o jedną pozycję w lewo, aby otrzymać Ba:=2 x Be. Wykonywane jest to za pomocą rejestru przesuwnego podłączonego do bufora przekaźników Fc.

Wynikiem dzielenia mantys jest liczba 1/2 < r < 2. Warunek ten sprawdzany jest w cyklach 17 i 18. Jeśli r  < 1, to od wykładnika odejmowane jest 1 i wynik przesuwa się o jedną pozycję w lewo w celu otrzymania znormalizowanej liczby.

cykl etap wykładnik mantysa
0 I, II, III    
1 IV, V Aa:=Af Ba:=Bf
I, II, III Ae:=Aa=Ab jeśli (Ba-Bb>=0), Be:=Ba-Bb; bt:=1;
inaczej Be:=Ba; bt:=0
2 IV, V Aa:=Ae;
Ab:=0
Bf:=0;
jeśli (bt=1), Bf[0]:=1;
Ba:=2 x Be
I, II, III Ae:=Aa+Ab jeśli (Ba-Bb>=0), Be:=Ba-Bb; bt:=1;
inaczej Be:=Ba; bt:=0
3 IV, V Aa:=Ae jeśli (bt=1), Bf[-1]:=1
Ba:= 2 x Be
I, II, III Ae:= Aa+Ab jeśli (Ba-Bb>=0), Be:=Ba-Bb; bt:=1;
inaczej Be:=Ba; bt:=0;
4 ... ... ...
i IV, V Aa:=Ae jeśli (bt=1), Bf[2-i]:=1
Ba:= 2 x Be
I, II, III Ae:=Aa+Ab jeśli (Ba-Bb>=0), Be:=Ba-Bb; bt:=1;
inaczej Be:=Ba; bt:=0;
15 ... ... ...
16 IV, V Aa:=Ae jeśli (bt=1), Bf[-14]:=1
Ba:= 2 x Be
I, II, III Ae:=Aa+Ab jeśli (Ba-Bb>=0), Be:=Ba-Bb; bt:=1;
inaczej Be:=Ba; bt:=0;
17 IV, V jeśli (Bf[0]=0), Ab:=-1 Ba:=Bf; Bb:=0
I, II, III Ae:=Aa+Ab Be:=Ba+Bb
18 IV, V Af:=Ae jeśli (Bf[0]=0), Bf:=2 x Be
inaczej Bf:=Be

Rys.10.: 18 cykli potrzebnych dla algorytmu dzielenia. i-ty bit rejestru Bf jest oznaczony jako Bf[i]. Przed wykonaniem operacji dzielna umieszczona zostaje w parze rejestrów <Af,Bf> a dzielnik w <Ab,Bb>

Na początek:  podrozdziału   strony 

Obliczanie pierwiastka kwadratowego

Algorytm obliczania pierwiastka kwadratowego jest klejnotem koronnym komputera Z3. Rysunek 11 pokazuje mikrosekwencje wymagane przez 20 cykli potrzebnych do obliczenia pierwiastka kwadratowego z danej liczby. Argument operacji umieszczany jest w parze rejestrów <Af,Bf>. Para rejestrów <Aa,Ba> jest zerowana. Algorytm oblicza pierwiastek kwadratowy z liczb o parzystym wykładniku. Jeśli wykładnik jest liczbą nieparzystą, to mantysa ulega przesunięciu o jedno miejsce w lewo, a wykładnik jest zmniejszany o jeden. Ostateczny wykładnik (obliczony w cyklu 19) jest równy połowie wartości wykładnika początkowego.

Główną ideą algorytmu jest zredukowanie operacji obliczania pierwiastka kwadratowego do dzielenia. Jeśli chcemy obliczyć pierwiastek kwadratowy z x, będziemy potrzebować liczby Q takiej, że x/Q=Q. Wynik Q tworzony jest kolejno przez ustawianie i-tego bitu na 1 i sprawdzenie, czy wciąż zachodzi warunek x>Q2. Jeśli tak nie jest, to i-ty bit musi mieć wartość 0.

Załóżmy, że już obliczyliśmy bity od 0-wego do -i+1 końcowego wyniku. Oznaczmy przez Q-i+1 mantysę

Q-i+1 = Bf[0] x 20 + Bf[-1] x 2-1 + ... + Bf[-i + 1] x 2-i+1

Bit -i jest następnie ustawiany na q-i i musi spełniać warunek

x  >= Q2-i = (Q-i+1 + q-i2-i)2

Jest to prawdą, jeśli

(x  - Q2-i+1) - 2-iq-i(2Q-i+1 + 2-iq-i) >= 0

Zdefiniujmy t-i przy pomocy wyrażenia

2-it-i= (x-Q-i+12)2-121 - 2-iq-i(2Q-i+1+2-iq-i)

Można to zapisać jako

2-it-i= t-i+12-i+12-121 - 2-iq-i(2Q-i+1+2-iq-i)

gdzie użyta została definicja rekurencyjna 2-i+1t-i+1=(x-Q-i+1)2. Upraszczając ostatnie wyrażenie otrzymujemy w końcu

t-i= 2t-i+1 - q-i(2Q-i+1+2-iq-i)

Jeśli t-i jest dodatnie dla q-i=1, to ustawiamy bit i-ty wyniku końcowego na 1, tj. Bf[-i]=1. Jeśli t-i jest ujemne, to ustawiamy Bf[-i]=0. Obliczenia rekurencyjne rozpoczynają się od t0=x. Q-i+1 przedstawia w każdym kroku wynik częściowy zawarty w rejestrze Bf. i-ty bit jest wstępnie ustawiany i sprawdzeniu ulega znak t-i.

Podstawowa pętla algorytmu obliczania pierwiastka kwadratowego dla bitu -i ma następującą postać:

Ba:=2xBe
Bb:=2xBf
Bb[-i]:=1
jeśli (Ba-Bb >= 0), to Be:=Ba-Bb, Bf[-i]:=1
inaczej Be:=Ba, Bf[-i]:=0

Do obliczenia pierwiastka kwadratowego używane są wszystkie bity rejestru Bf. Jeśli pierwotna liczba leży w poprawnym zakresie, to wynik również zawiera się w dozwolonym zakresie.

cykl etap wykładnik mantysa
0 I, II, III    
1 IV, V   jeśli (Af[0]=1), Ba:=2xBf
inaczej Ba:=Bf;
Bb[0]:=1
I, II, III   jeśli (Ba-Bb>=0), Be:=Ba-Bb, bt:=1
inaczej Be:=Ba, bt:=0
2 IV, V   Bf:=0 // jeśli (bt=1), Bf[0]:=1
Ba:=2xBe, Bb:=2xBf, Bb[-1]:=1
I, II, III   jeśli (Ba-Bb>=0), Be:=Ba-Bb, bt:=1
inaczej Be:=Ba, bt:=0
3 IV, V   jeśli (bt=1), Bf[-1]:=1
Ba:=2xBe, Bb:=2xBf, Bb[-2]:=1
I, II, III   jeśli (Ba-Bb>=0), Be:=Ba-Bb, bt:=1
inaczej Be:=Ba, bt:=0
... ... ... ...
i IV, V   jeśli (bt=1), Bf[2-i]:=1
Ba:=2xBe, Bb:=2xBf, Bb[1-i]:=1
I, II, III   jeśli (Ba-Bb>=0), Be:=Ba-Bb, bt:=1
inaczej Be:=Ba, bt:=0
... ... ... ...
18 IV, V   jeśli (bt=1), Bf[-16]:=1
Ba:=2xBe, Bb:=2xBf
I, II, III   jeśli (Ba-Bb>=0), Be:=Ba-Bb, bt:=1
inaczej Be:=Ba, bt:=0
19 IV, V Aa:=Af/2 Ba:=Bf, Bb:=0
I, II, III Ae:=Aa+0 Be:=Ba+Bb
20 IV, V Af:=Ae Bf:=Be

Rys.11.: 20 cykli potrzebnych dla algorytmu pierwiastka kwadratowego. i-te bity rejestrów Bf i Af są oznaczone odpowiednio przez Bf[i] oraz Af[i]. Przed rozpoczęciem operacji argument jest umieszczany w parze rejestrów <Af,Bf>.

Na początek:  podrozdziału   strony 

Instrukcje odczytu i wyświetlania

Dwoma najbardziej złożonymi instrukcjami komputera Z3 są instrukcje związane z wprowadzaniem i wyświetlaniem liczb dziesiętnych. Czterocyfrowa liczba dziesiętna wprowadzona przez klawiaturę jest najpierw zamieniana na binarną liczbę całkowitą. Odbywa się to przez kolejny odczyt każdej cyfry, zamianę jej na liczbę binarną i zapis jej w bitach Ba[-10], Ba[-11], Ba[-12] i Ba[-13] rejestru Ba. Liczbę w rejestrze Ba mnoży się przez 10 i procedura jest kontynuowana dla pozostałych cyfr. Po czterech powtórzeniach dziesiętna liczba na wejściu zostanie zamieniona na liczbę binarną (wykładnik jest ustawiany na poprawną wartość). Kłopotliwa jest obsługa wykładnika. Jeśli wykładnik e  jest dodatni, to mantysa musi zostać mnożona e  razy przez 10. Jeśli jest ujemny, to musi być pomnożona |e| razy przez 0,1. Mnożenie przez 10 jest względnie proste: mantysa w Be może być przesunięta o jeden bit w lewo i następnie zapisana w Ba (tj. Ba=2xBe). W tym samym czasie Be może zostać przesunięte o 3 bity w lewo i umieszczone w Bb (tj. Bb=8xBe). Dodanie Ba i Bb da pożądany wynik: pomnożenie pierwotnej liczby w Be przez stałą 10. Proces ten zabiera 4 cykle na mnożenie, co oznacza 32 cykle dla wykładnika dziesiętnego +8. Ponieważ operacja odczytu potrzebuje co najmniej 9 cykli, oznacza to, że liczba dziesiętna o wykładniku +8 jest odczytywana w ciągu 41 cykli.

W przypadku ujemnych wykładników mnożenie przez stałą 0,1 wykonywane jest również za pomocą rejestrów przesuwnych oraz sumatorów. Mnożenie to jest nieco bardziej złożone, ponieważ w systemie binarnym liczba 0,1 jest ułamkiem okresowym. Opis używanych mikrorozkazów zaprowadziłby nas zbyt daleko od głównego tematu, więc go tutaj pominiemy.

Instrukcja wyświetlania działa na zasadzie powtarzanego mnożenia lub dzielenia przez 10. Jeśli dwójkowy wykładnik liczby w rejestrze R1 jest dodatni, liczba ta mnożona jest przez 0,1 tyle razy ile jest potrzebne, aby binarny wykładnik przyjął wartość 2 i aż pierwsze cztery bity rejestru Bf będą zawierały liczbę pomiędzy 0 a 9 (0000 i 1001). Jest to cyfra dziesiętna, która może być wyświetlona w kolejnej kolumnie panelu wyjściowego. Liczba ta jest odejmowana od mantysy w Bf i proces jest kontynuowany dla pozostałych cyfr. Jeśli wykładnik binarny liczby w rejestrze R1 jest ujemny, to proces jest podobny, lecz używane są mnożenia przez stałą 10.

Na początek:  podrozdziału   strony 

Architektura Pierwszych Maszyn Liczących Konrada Zuse  została umieszczona w serwisie edukacyjnym nauczycieli I-LO w Tarnowie za pisemną zgodą autora:
prof. dr Raula Rojasa
Z języka angielskiego tłumaczenie wykonał:
mgr Jerzy Wałaszek

Zespół Przedmiotowy
Chemii-Fizyki-Informatyki

w I Liceum Ogólnokształcącym
im. Kazimierza Brodzińskiego
w Tarnowie
ul. Piłsudskiego 4
©2021 mgr Jerzy Wałaszek

Materiały tylko do użytku dydaktycznego. Ich kopiowanie i powielanie jest dozwolone
pod warunkiem podania źródła oraz niepobierania za to pieniędzy.

Pytania proszę przesyłać na adres email: i-lo@eduinf.waw.pl

Serwis wykorzystuje pliki cookies. Jeśli nie chcesz ich otrzymywać, zablokuj je w swojej przeglądarce.

Informacje dodatkowe.