Jak przechowywać liczby zmiennoprzecinkowe w asemblerze dla 8051 - BCD czy binarnie?
Procedury zmiennoprzecinkowe 8051
From: "Gissbourne" <gissbourne_at_nospam_wp.pl>
Subject: Procedury zmiennoprzecinkowe 8051
Date: Thu, 17 Oct 2002 23:24:09 +0200
Szukam procedur zmiennoprzecinkowych w asemblerze. Moze byc tylko sam opis.
Jak najlepiej przechowywac liczbe ? (w kodzie binarnym, BCD, moze jakas
mieszanka - mantysa w BCD a wykladnik w bin ?)
Gissbourne
From: "mk" <mkszym_at_nospam_wp.pl>
Subject: Re: Procedury zmiennoprzecinkowe 8051
Date: Fri, 18 Oct 2002 00:02:26 +0200
Szukam procedur zmiennoprzecinkowych w asemblerze. Moze byc tylko sam
opis.
Jak najlepiej przechowywac liczbe ? (w kodzie binarnym, BCD, moze jakas
mieszanka - mantysa w BCD a wykladnik w bin ?)
Gissbourne
Sposób przechowywania liczb zmiennoprzecinkowych opisuje standard IEEE754
(mam nadzieję, że dobrze napisałem bo walę z pamięci) i najlepiej trzymać
się tego standardu.
Co do procedur to polecam jednak użyć języka wyskokiego poziomu.
Jeśli koniecznie chcesz mieć to w asemblerze to skompiluj jakieś działanie
arytmetyczne napisane np. w C i obejrzyj wygenerowany kod :-)
Kiedyś też szukałem i na takim właśnie rozwiązaniu się skończyło.
Jeśli interesuje Cię tylko opis algorytmów zajrzyj do książek do
architektury komputerów lub arytmetyki komp - np prof. J. Biernat ;-) W
książce Stallingsa (nazwisko mogłem przekręcić) też coś było
pzdr
mk
From: "Gissbourne" <gissbourne_at_nospam_wp.pl>
Subject: Re: Procedury zmiennoprzecinkowe 8051
Date: Fri, 18 Oct 2002 00:25:28 +0200
Użytkownik "mk" <mkszym_at_nospam_wp.pl> napisał w wiadomości news:
Sposób przechowywania liczb zmiennoprzecinkowych opisuje standard IEEE754
(mam nadzieję, że dobrze napisałem bo walę z pamięci) i najlepiej trzymać
się tego standardu.
Mysle, ze zaleznie od architektury procka (listy rozkazow) najlepiej dobrac
metode. Oczywiscie dzieki za wskazowke - przejrze standard.
Co do procedur to polecam jednak użyć języka wyskokiego poziomu.
Jeśli koniecznie chcesz mieć to w asemblerze to skompiluj jakieś działanie
arytmetyczne napisane np. w C i obejrzyj wygenerowany kod :-)
Kiedyś też szukałem i na takim właśnie rozwiązaniu się skończyło.
Kiedys przegladalem procedurki z Atari XL/XE - za duzo tlumaczenia (proc
6502). Zalezy mi na podstawowych dzialaniach +-*/SQR i malej dokladnosci
(jakies 3-4 liczby po przecinku). Czy C wygeneruje mi wzglednie krotki kod ?
Jeśli interesuje Cię tylko opis algorytmów zajrzyj do książek do
architektury komputerów lub arytmetyki komp - np prof. J. Biernat ;-) W
książce Stallingsa (nazwisko mogłem przekręcić) też coś było
Dzieki, moze jeszcze jakis link ? :)
Pozdr
Gissbourne
From: "mk" <mkszym_at_nospam_wp.pl>
Subject: Re: Procedury zmiennoprzecinkowe 8051
Date: Fri, 18 Oct 2002 00:52:26 +0200
Mysle, ze zaleznie od architektury procka (listy rozkazow) najlepiej
dobrac
metode. Oczywiscie dzieki za wskazowke - przejrze standard.
Dawno dawno temu zależało, ale od czasu wprowadzenia standardu IEEE754 to
producenci procków tak konstruują swoje architektury by dobrze współdziałać
z tą normą (bo wkońcu to standard!)
Na stronę IEEE to raczej nie leć bo tam za darmo wiele nie otrzymasz :-(((
Klepnij w Googlach IEEE754 i zapewne coś znajdziesz
Kiedys przegladalem procedurki z Atari XL/XE - za duzo tlumaczenia (proc
6502). Zalezy mi na podstawowych dzialaniach +-*/SQR i malej dokladnosci
(jakies 3-4 liczby po przecinku). Czy C wygeneruje mi wzglednie krotki kod
?
Procedur działań arytmetycznych nie są generowane przez kompilator (jeśli
korzystasz z funkcji bibliotecznych), ale są zaszyte w bibliotekach, a
biblioteki napisane są najpewniej ręcznie przez b. doświadczonych
programistów - raczej nic szybszego (a może zwięzłego) nie napiszesz (a jak
napiszesz to od razu wal do takiego producenta softwaru - zapewne dobrze
zapłaci)
Nie wiem co jest twoim celem ? Napisać soft działań zmiennoprz., czy może
potrzebujesz zrozumieć zasade działania tych algorytmów.
Jeśli chodzi Ci o zrozumienie działania to dobrze pogogluj. Jakiś czas temu
na projekcie robiłem projekt układu pierwiastkującego liczby
zmiennoprzecinkowe i o działaniach +-*/ było można znaleźć sporo informacji
w sieci, z pierwiastkowaniem zaś było gorzej. Skorzystałem wtedy z książki
"Arytmetyka komputerów" J. Biernat gdzie był opis sposobu pierwiastkowania
liczb stałoprzecinkowych i przekształciłem to na liczby zmiennoprzecinkowe.
Dzieki, moze jeszcze jakis link ? :)
http://cch.loria.fr/documentation/IEEE754/
pzdr
mk
From: "Jacek P." <jp.ines_at_nospam_poczta.wp.pl>
Subject: Re: Procedury zmiennoprzecinkowe 8051
Date: Fri, 18 Oct 2002 03:03:12 +0200
Użytkownik Gissbourne <gissbourne_at_nospam_wp.pl> w wiadomości do grup dyskusyjnych
napisał:aon9m1$998$1_at_nospam_news2.tpi.pl...
Szukam procedur zmiennoprzecinkowych w asemblerze. Moze byc tylko sam
opis.
Jak najlepiej przechowywac liczbe ? (w kodzie binarnym, BCD, moze jakas
mieszanka - mantysa w BCD a wykladnik w bin ?)
Gissbourne
Kilka lat temu ściągnąłem takie procedury w asm 51 ze strony Philipsa
www.semiconductors.philips.com
--
Pozdrowienia Jacek Przepiorkowski
From: "jp" <jacek.pozniak_at_nospam_klienci.pkobp.pl>
Subject: Re: Procedury zmiennoprzecinkowe 8051
Date: Fri, 18 Oct 2002 11:40:52 +0200
Użytkownik "Gissbourne" <gissbourne_at_nospam_wp.pl> napisał w wiadomości
news:aon9m1$998$1_at_nospam_news2.tpi.pl...
Szukam procedur zmiennoprzecinkowych w asemblerze. Moze byc tylko sam
opis.
Jak najlepiej przechowywac liczbe ? (w kodzie binarnym, BCD, moze jakas
mieszanka - mantysa w BCD a wykladnik w bin ?)
Gissbourne
Witam
Kiedyś kupilem w jednej firmie z Wroclawia bibliotekę (ze źródłami) na '51.
Działało OK a kosztowało naprawdę niewiele.
Format 4-bajtowy (3m + 1e), nie pamiętam czy trzymali się standardów.
W tej chwili nazwy firmy nie pamiętam ale mogę odszukać.
Jak chcesz małej dokładności (2m+1e) to był w jednej książce (nazwisko
współautora: Koślarz???). Co prawda na i8080 ale zawsze.
Pozdrawiam
Jacek Poźniak
From: "Marek Dzwonnik" <mdz_at_nospam_message.pl>
Subject: Re: Procedury zmiennoprzecinkowe 8051
Date: Fri, 18 Oct 2002 14:09:33 +0200
Użytkownik "jp" <jacek.pozniak_at_nospam_klienci.pkobp.pl> napisał w wiadomości
news:aool32$lpb$1_at_nospam_flis.man.torun.pl...
Jak chcesz małej dokładności (2m+1e) to był w jednej książce (nazwisko
współautora: Koślarz???). Co prawda na i8080 ale zawsze.
"Podstawy i praktyka programowania mikroprocesorów"
Jerzy Grabowski, Stanisław Koślacz
Wyd II, zmienione i rozszerzone, WNT 1987
ISBN 83-204-0811-3
Dodatek B: (str.425) Biblioteka arytmetyki zmiennopozycyjnej
MDz
From: "Gissbourne" <gissbourne_at_nospam_wp.pl>
Subject: Re: Procedury zmiennoprzecinkowe 8051
Date: Fri, 18 Oct 2002 13:52:07 +0200
Dzieki wszystkim za wskazowki. Zabieram sie do pisania.
Pozdr
Gissbourne
From: "Piotr Wyderski" <piotr.wyderskiREMOVE_at_nospam_hoga.pl>
Subject: Re: Procedury zmiennoprzecinkowe 8051
Date: Fri, 18 Oct 2002 16:08:55 +0200
Gissbourne wrote:
Szukam procedur zmiennoprzecinkowych w asemblerze. Moze byc tylko sam
opis.
Jak najlepiej przechowywac liczbe ? (w kodzie binarnym, BCD, moze jakas
mieszanka - mantysa w BCD a wykladnik w bin ?)
Naturalny kod binarny bedzie najbardziej oszczedny, wiec chyba warto w nim.
Dla takich wymagan jak piszesz: 2 bajty na mantyse, x na ceche (bo nigdzie
nie podajesz potrzebnego zakresu...), gdzies w nich upchnac jeden bit znaku.
Same algorytmy dzialan zmiennoprzecinkowych sa proste, wiec tu chyba
komentarza nie trzeba. Poza tym moze wystarczy Ci staly przecinek, bedzie
jeszcze prosciej.
Pozdrawiam
Piotr Wyderski
From: jfox_at_nospam_poczta.onet.pl (J.F.)
Subject: Re: Procedury zmiennoprzecinkowe 8051
Date: Sun, 20 Oct 2002 11:18:28 GMT
On Thu, 17 Oct 2002 23:24:09 +0200, Gissbourne wrote:
Szukam procedur zmiennoprzecinkowych w asemblerze. Moze byc tylko sam opis.
Jak najlepiej przechowywac liczbe ? (w kodzie binarnym, BCD, moze jakas
mieszanka - mantysa w BCD a wykladnik w bin ?)
A chcesz na tym liczyc, czy to wprowadzac i wyswietlac ?
Generalnie BCD stosuja wylacznie ci ktorzy sie konwersji boja -
znacznie lepiej sie liczy w binarkach.
Polecam postac (1+m)*2^(c-128)
tzn pamietasz jeden bajt c - ktory przy wartosci 80h oznacza
*1, i kilka bajtow m, ktore sa reszta po przecinku mantysy
z zakresu 1..2. No i oczywiscie bit znaku, ktory najwygodniej
pamietac jako najstarszy bit m.
Uwaga - powyzsze starcza na liczby z zakresu ~1e-38 .. 1e38.
J.