Wywiad z twórcą standardu IEEE 754, Williamem Kahanem


Tematy pokrewne

 

William Kahan

Gdybyś w latach 60-tych czy 70-tych ubiegłego wieku był programistą stosującym obliczenia zmiennoprzecinkowe, to musiałbyś sobie radzić z całą gamą różnych systemów, a każdy komputer udostępniał inny zakres i precyzję liczb zmiennoprzecinkowych. Chociaż wiele z tych różnic było jedynie uciążliwe, to zdarzały się także bardzo poważne. Dla przykładu jeden komputer posiadał wartości, które dla dodawania zachowywały się jako niezerowe, a dla dzielenia były traktowane jak zero. Niekiedy programista musiał wymnażać wszystkie wartości przez 1.0 lub wykonywać polecenia takie jak

 

X = (X + X) - X

 

aby program działał prawidłowo. Czynniki te skutecznie uniemożliwiały pisanie przenośnych i wiarygodnych programów dla obliczeń numerycznych.

W 1976 firma Intel rozpoczęła prace nad zmiennoprzecinkowym koprocesorem arytmetycznym dla mikroprocesorów Intel8086 i i432. John Palmer przekonał kierownictwo Intela, iż powinni opracować pełny standard określający operacje arytmetyczne dla projektowanego koprocesora, aby wszystkie procesory Intela produkowały takie same wyniki.

Ponieważ William Kahan posiadał doświadczenie z systemami zmiennoprzecinkowymi stosowanymi przez IBM, Craya oraz Control DataCorp. (CDC), był jednym z niewielu, którzy doskonale rozumieli wyzwanie stawiane przez tworzenie dokładnego kodu numerycznego.

W 1976 wpływ Kahana na obliczenia zmiennoprzecinkowe wzrósł, gdy Intel zatrudnił go w charakterze konsultanta do pomocy przy opracowywaniu arytmetyki dla procesora 8087. W wyniku przyczynił się on do narodzin standardu IEEE 754 określającego obliczenia zmiennoprzecinkowe.

(Charles Severence - reporter) - Gdy Intel zatrudnił pana w charakterze konsultanta w 1976 roku, co chciano, aby pan realizował?

(William Kahan) - Ludzie z Intela zdecydowali, iż potrzebują naprawdę porządnej arytmetyki. Komputer DEC VAX nie był wtedy taki zły, więc moja propozycja brzmiała następująco: Czemu nie skopiować rozwiązań VAX'a? Intel pożądał najlepszej arytmetyki, zatem wspólnie z Palmerem zaczęliśmy się zastanawiać jaka powinna być ta najlepsza arytmetyka. Od Palmera dowiedziałem się, iż Intel przewidywał sprzedaż swoich procesorów w bardzo dużych ilościach. Dobra arytmetyka mogła być mocnym punktem reklamowym dla dużego rynku zbytu, który w owym czasie zaczął zagrażać Krzemowej Dolinie ponieważ krążyły plotki, iż Intel buduje jednoukładowy koprocesor zmiennoprzecinkowy - i8087. A gdy usłyszano te plotki, zaczęła rozszerzać się panika.

 

(CS) - I stąd pochodzi standard IEEE 754?

(WK) - Ludzie powtarzali od czasu do czasu (jako żart), iż inne firmy z Krzemowej Doliny przestraszyły się i przyłączyły do grupy roboczej IEEE 754. Na tym pierwszym spotkaniu zdałem sobie sprawę, że członkowie komitetu byli bardzo zaangażowani. W listopadzie 1977 CDC zlekceważyło uczestnictwo w tym zebraniu ponieważ komitet zajmował się jakimś mikroprocesorem - a oni nie mieli pojęcia, że mikroprocesor będzie cokolwiek znaczył. Cray myślał tak samo. IBM przysłał tylko kilku obserwatorów - wiedzieli, że nadchodzi era mikroprocesorów, ale nie mogli o nich zbyt wiele powiedzieć.

 

(CS) - Jak wyglądały zebrania?

(WK) - Jeden z moich przyjaciół powiedział, iż uczestniczenie w takim zebraniu było jak wizyta w Wielkim Kanionie: po prostu wspaniałe. Na typowych spotkaniach każdy z uczestników stara się narzucić innym swój własny produkt. Sądzę, iż dobrze byłoby podać chociaż jeden przykład - a jest nim standard zmiennoprzecinkowy - gdzie bałaganiarstwo nie zatriumfowało. Cray, CDC i IBM mogli się wtrącić, jeśliby mieli ochotę, i wszystko zniszczyć. Lecz CDC i Cray musieli rozumować w ten sposób : "Mikroprocesory. Po co się martwić?"

 

(CS) - Co się wydarzyło dalej?

(WK) - Po pierwszym zebraniu udałem się do Intela i poprosiłem o uczestnictwo w pracach nad standardem. Następnie wspólnie z Geromem Kunanem, Haroldem Stone'm przygotowaliśmy dokument szkicowy specyfikacji Intela w formacie standardu IEEE i przynieśliśmy go na spotkanie grupy IEEE 754.

 

(CS) - Czy były jakieś komplikacje?

(WK) - Od Palmera dostałem słowne pozwolenie na ujawnienie specyfikacji typowych funkcji układu koprocesora, lecz nie wolno mi było powiedzieć ani słowa na temat jego architektury. Mogłem opisać precyzję, zakresy cech, wartości specjalne oraz formaty przechowywania danych zmiennoprzecinkowych. Mogłem również ujawnić niektóre powody podjęcia takich a nie innych decyzji. Nie powiedzieliśmy ani słowa na temat wyższych funkcji układu i8087 - musiałem się gryźć w język (Przez wyższe funkcje uważa się zwykle wyliczanie funkcji trygonometrycznych, logarytmicznych i potęgowych). Mieliśmy zamiar umieścić w układzie 8087 wyższe funkcje i miał on posiadać interesującą architekturę. Nie chcieliśmy jednak puszczać pary z ust. Intel chciał światu sprawić prawdziwą niespodziankę. Wykorzystując zaledwie 40000 tranzystorów mieliśmy zamiar zbudować układ scalony wyposażony w najważniejsze funkcje biblioteki matematycznej.

 

(CS) - Zatem zaniósł pan ten szkic do grupy IEEE 754, lecz były tam proponowane również inne rozwiązania. DEC sugerował zaadoptowanie ich formatu, inni też wysuwali podobne żądania. Początkowa reakcja na wasz dokument była mieszana, nieprawdaż?

(WK) - Z początku wydawało się to całkiem skomplikowane. Lecz nasza propozycja wyróżniała się od innych tym, iż my uzasadniliśmy wszystkie szczegóły. Pozostawało nam jeszcze zwiększyć prawdopodobieństwo, iż kod będzie dawał poprawne wyniki i musieliśmy go tak uformować, aby ludzie będący prawdziwymi ekspertami w dziedzinie obliczeń zmiennoprzecinkowych mogli pisać przenośne oprogramowanie i udowadniać, że będzie ono działało. Projekt również musiał być wykonalny. Musiałem mieć pewność, iż po zaimplementowaniu arytmetyki zmiennoprzecinkowej w układzie scalonym, będzie ona wciąż wykonywana z konkurencyjną szybkością. Jednocześnie musiałem być ostrożny. W Intelu działy się rzeczy, o których nie wolno mi było mówić z komitetem. W szczególności dotyczyło to problemu stopniowego niedomiaru - liczb podnormalnych. Miałem w głowie plan obsługi z dużą szybkością stopniowego niedomiaru, lecz nie wolno mi było o tym mówić.

 

(CS) - Co się stało z tymi propozycjami?

(WK) - Istniejący format DEC VAX'a był ogólnie przyjętym standardem. Pierwotnie format podwójnej precyzji DEC'a miał taką samą ilość bitów cechy jak w pojedynczej precyzji, co okazywało się zbyt małą ilością bitów cechy przy niektórych obliczeniach w podwójnej precyzji. DEC rozwiązał to przez wprowadzenie swojego formatu G dla danych w podwójnej precyzji liczb zmiennoprzecinkowych. Przy tym formacie G główną pozostającą różnicą pomiędzy formatem Intela a formatem VAX'a był stopniowy niedomiar. (Stopniowy niedomiar posiada kilka zalet w stosunku do natychmiastowego niedomiaru. Bez niego przerwa pomiędzy zerem a najmniejszą wartością zmiennoprzecinkową jest dużo większa niż przerwa pomiędzy kolejnymi małymi liczbami zmiennoprzecinkowymi. Bez stopniowego niedomiaru można znaleźć dwie wartości, X i Y (takie że X nie jest równe Y), a gdy się je odejmie jedną od drugiej, wynikiem będzie zero. Podczas gdy utalentowany analityk numeryczny poradziłby sobie z tym ograniczeniem w wielu sytuacjach, to taka nieregularność miałaby tendencję do powodowania problemów u mniej utalentowanych programistów.)

 

(CS) - Jeśli znamy zalety niedomiaru, to dlaczego ktoś miałby być mu przeciwnym?

(WK) - Podstawowym powodem dla niektórych członków komitetu było twierdzenie, iż stopniowy niedomiar spowalniałby szybkość wykonania operacji zmiennoprzecinkowych. Po wygaśnięciu obowiązku zachowania tajemnicy mogłem mówić o sposobach realizacji sprzętowej stopniowego niedomiaru bez zwalniania wszystkich operacji zmiennoprzecinkowych. Na jednym ze zebrań pod koniec lat 1970-tych DEC zaprezentował inżyniera sprzętu komputerowego, który twierdził, iż niemożliwym będzie zbudowanie szybkiego sprzętu obliczeniowego obsługującego proponowany standard. Zdarzyło się, że był u nas pewien student, George Taylor, który podjął się zadania wyprodukowania nowej płyty zmiennoprzecinkowej dla VAX'a. Mieliśmy zamiar pozamieniać wszystkie płyty zmiennoprzecinkowe naszymi własnymi pracującymi w arytmetyce standardu IEEE. Płyty te integrowały się ze zestawem instrukcji komputera DEC VAX. Mieliśmy zamiar porównać dobrą arytmetykę VAX'a z arytmetyką IEEE i sprawdzić, jaka ona będzie. Zatem George przybył na zebranie, pokazał jak to miało działać i dla każdego stało się zupełnie jasne, iż jest to bezwzględnie wykonalne.

 

(CS) - Czy nie było również próby dowiedzenia, iż stopniowy niedomiar był zły z teoretycznego punktu widzenia?

(WK) - Tak, DEC walczył o przekonanie nas, iż stopniowy niedomiar jest złą rzeczą. Jeśliby się im udało udowodnić, iż nie jest konieczny, to nic nie stałoby na przeszkodzie w zastosowaniu systemu cechy z nadmiarem DEC'a. Obsługa wyjątków oraz inne szczegóły mogły być zrealizowane przy pomocy drobnych podkręceń. W końcu DEC wyznaczył jednego z najlepszych na wschodzie ekspertów od analizy błędów, G. W. Stewarta do przeprowadzenia badań. Miał on przeglądnąć aspekty analizy błędów, aby pokazać, iż stopniowy niedomiar nie był tym, za co go podawałem.

 

(CS) - I co się stało?

(WK) - Na zebraniu w Bostonie w 1981 roku Stewart doniósł, iż uważa stopniowy niedomiar za właściwą rzecz do realizacji. Ludzie z DEC'a byli raczej zawiedzieni tym raportem i oświadczyli - "OK, opublikujemy to później". Byli naprawdę zdruzgotani, ponieważ odbyło się to na ich podwórku. Po tej raczej znaczącej porażce, zmiękli.

 

(CS) - Przy całym sukcesie standardu IEEE 754, czego mu brakuje?

(WK) Kompilatory i języki programowania nowe oraz stare - od Javy do Fortranu - wciąż nie posiadają kompetentnej obsługi cech standardu IEEE 754, które udostępnia obecnie praktycznie każdy sprzęt obliczeniowy. Głównym wyjątkiem jest SANE - the Standard Apple Numerical Environment (Standardowe Środowisko Obliczeniowe Apple'a) na starych Macach opartych o procesor Motoroli 68K. Programiści wydają się nieświadomi faktu, iż IEEE 754 jest standardem dla ich środowiska programowego, a nie tylko dla sprzętu obliczeniowego. Nowa propozycja C9X przed ANSIX3J11 jest nieśmiałą próbą zasugerowania obsługi tego standardu w językach C i C++. Zasługuje ona na rozważenie przez programistów, którym próbuje służyć, a nie przeszkadzać.

 

Wraz z rozprzestrzenianiem się komputerów opartych o mikroprocesory w oczywisty sposób korzystamy z dobrodziejstw ogólnie dostępnego standardu zmiennoprzecinkowego. Użytkownicy oraz programiści muszą podziękować Williamowi Kahanowi i innym osobom zaangażowanym w powstanie standardu IEEE 754 za ich trud.

William Kahan uzyskał nagrodę Turinga w 1989 roku i obecnie zajmuje stanowisko profesora informatyki na University of California w Berkeley. Można się z nim skontaktować pocztą e-mail pod adresem wkahan@cs.berkeley.edu.

 


Zobacz dalej...

Przykładowy system zmiennoprzecinkowy | Standard IEEE 754



List do administratora Serwisu Edukacyjnego Nauczycieli I LO

Twój email: (jeśli chcesz otrzymać odpowiedź)
Temat:
Uwaga: ← tutaj wpisz wyraz  ilo , inaczej list zostanie zignorowany

Poniżej wpisz swoje uwagi lub pytania dotyczące tego rozdziału (max. 2048 znaków).

Liczba znaków do wykorzystania: 2048

 

W związku z dużą liczbą listów do naszego serwisu edukacyjnego nie będziemy udzielać odpowiedzi na prośby rozwiązywania zadań, pisania programów zaliczeniowych, przesyłania materiałów czy też tłumaczenia zagadnień szeroko opisywanych w podręcznikach.



   I Liceum Ogólnokształcące   
im. Kazimierza Brodzińskiego
w Tarnowie

©2017 mgr Jerzy Wałaszek

Dokument ten rozpowszechniany jest zgodnie z zasadami licencji
GNU Free Documentation License.