Aktyw Forum

Zarejestruj się na forum.ep.com.pl i zgłoś swój akces do Aktywu Forum. Jeśli jesteś już zarejestrowany wystarczy, że się zalogujesz.

Sprawdź punkty Zarejestruj się

Zmienne typu SINGLE i WORD

Awatar użytkownika
XAX
-
-
Posty:48
Rejestracja:4 kwie 2003, o 06:11
Lokalizacja:Krakow
Zmienne typu SINGLE i WORD

Postautor: XAX » 18 mar 2007, o 23:51

Witam

Czy ktoś wie czemu zmienna single=0,0103 przy wyświetlaniu przyjmuje wartość 0,010299978 ???
Po to stosuje się zmienne zmiennoprzecinkowe żeby mieć dokładność a nie jakieś bzdury.

$regfile = "m8def.dat" ' typ procesora
$crystal = 8000000 ' czestotliwosc kwarcu
Config Lcdpin = Pin , Db4 = Portd.2 , Db5 = Portd.3 , Db6 = Portd.4 , Db7 = Portd.5 , E = Portd.1 , Rs = Portd.0
Config Lcd = 20 * 4 'typ LCD
Cursor Off 'wyłącza kursor
Cls


Dim P As Single

P = 0.0103

Lcd "P=" ; P

End

Przy okazji czy ktoś przy okazji może mi wyjaśnić jak przykładowo zmienną single=12345,6789 zmienić prosto w zmienną word=12345 ????
Wydaje mi się że obliczenia na zmiennej typu WORD trwają krócej i mniej obciążają procesor niż zmienne single.

Pozdrawiam
XAX

Awatar użytkownika
pajaczek
Moderator
Moderator
Posty:2653
Rejestracja:24 sty 2005, o 00:39
Lokalizacja:Winny gród

Re: Zmienne typu SINGLE i WORD

Postautor: pajaczek » 19 mar 2007, o 00:08

Witam

Czy ktoś wie czemu zmienna single=0,0103 przy wyświetlaniu przyjmuje wartość 0,010299978 ???
Po to stosuje się zmienne zmiennoprzecinkowe żeby mieć dokładność a nie jakieś bzdury
Poczytaj moze troche o sposobie zapisu liczb zmiennoprzecinkowych, takie hasla jak "cecha" i "mantysa", moze to Ci cos rozjasni.
Tak na szybko moge powiedziec ze w takim "wyswietleniu wyniku" nie ma nic dziwnego, i wystapi ono niezaleznie od uC, zalezec za to bedzie od uzytego typu zmiennoprzecinkowego, zawsze jednak moga (i beda) pojawiac sie przeklamania, mniejsze lub wieksze.

Przy okazji czy ktoś przy okazji może mi wyjaśnić jak przykładowo zmienną single=12345,6789 zmienić prosto w zmienną word=12345 ????
Wydaje mi się że obliczenia na zmiennej typu WORD trwają krócej i mniej obciążają procesor niż zmienne single.
A probowales poprostu przypisac jedna do drugiej ??

Btw. Dobrze Ci sie wydaje... przynajmniej dla wiekszosci uC bedzie to prawda, z prostej przyczyny... brak dedykowanego koprocesora arytmetycznego, ktory zajmowal by sie obliczeniami zmiennoprzecinkowymi.

Awatar użytkownika
XAX
-
-
Posty:48
Rejestracja:4 kwie 2003, o 06:11
Lokalizacja:Krakow

Postautor: XAX » 19 mar 2007, o 01:24

Witam ponownie.
Dzięki pajaczek za szybką odpowiedz :)

Tak myślałem że tak jest z tą zmienną single :) ale wolałem mieć potwierdzenie.

Nie wiem jak to się stało ale kiedyś próbowałem zapisać do zmiennej WORD dane z single i był błąd teraz działa. Musze teraz rozgryźć jak prosto wyświetlić na lcd zmienną WORD (na przykład 12345) w formie zmiennoprzecinkowej (12,345). Program jest już spory i zaraz mi się skończy pamięć w procku.

Awatar użytkownika
pajaczek
Moderator
Moderator
Posty:2653
Rejestracja:24 sty 2005, o 00:39
Lokalizacja:Winny gród

Postautor: pajaczek » 19 mar 2007, o 11:37

Musze teraz rozgryźć jak prosto wyświetlić na lcd zmienną WORD (na przykład 12345) w formie zmiennoprzecinkowej (12,345). Program jest już spory i zaraz mi się skończy pamięć w procku.
Wyswietl 12345/1000
Wyswietl przecinek
Wyswietl 12345 modulo 1000

;)

albo poprostu zmienna single=12345/1000 i ja wyswietlic ;)

Btw. jak cos nie daje sie przypisac, to mozna sprobowac rzutowania, ale to niech ktos z Bascomowcow sie wypowie, bo sam nie pamietam czy to bylo "bezbolesne".

Wróć do „Projektowanie PCB, programy EDA, CAD, narzędziowe”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 28 gości