Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 23 sty 2025, o 19:18


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 5 ] 
Autor Wiadomość
 Tytuł: wartość float
PostNapisane: 24 lip 2014, o 17:49 
Offline
Nowy

Dołączył(a): 06 lis 2013
Posty: 5
Pomógł: 0

Mam do was taką zagwozdkę:
Obrazek

Jak widać tworzę sobie float i przypisuje sobie do niego jakąś wartość. Ale w debugerze patrzę, że ta zmienna ma inną wartość. Dlaczego? Pracuję na stm32vldiscovery i CooCox.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 lip 2014, o 17:58 
Offline
Użytkownik

Dołączył(a): 04 paź 2011
Posty: 8597
Pomógł: 337

Nie zwracaj uwagi na debuger w coide , czasem coś mu się kaszani przy pracy z STlinkiem , niestety najlepiej współpracuje
z Colinkiem ::P

_________________
Zbuduj swój system [url=https://helion.pl/ksiazki/w-labiryncie-iot-budowanie-urzadzen-z-wykorzystaniem-ukladow-esp8266-i-esp32-andrzej-gromczynski,wlablo.htm#format/d]IOT[/url]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 lip 2014, o 19:12 
Offline
Nowy

Dołączył(a): 06 lis 2013
Posty: 5
Pomógł: 0

No właśnie debuger działa dobrze. Po prostu ta zmienna ma taką wartość. Funkcją USART_float wysyłam rsem float z 4 miejscami po przecinku i w terminalu odbieram 3.0999 ...

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 lip 2014, o 19:41 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 07 kwi 2013
Posty: 418
Lokalizacja: Rzeszów
Pomógł: 102

Moim zdaniem nie jest to problem z debuger'em, ale kwestia samej reprezentacji liczb zmiennoprzecinkowych w systemach cyfrowych. Nie można dokładnie przedstawić liczby 3.1 w sposób binarny, a jedynie jej dobre przybliżenie (11.0(0011)) w ten właśnie sposób, że po powtórnej konwersji otrzymamy 3.0(9).

Dla sprawdzenia polecam taki konwerter online: http://baseconvert.com
Wprowadzając w pole "Binary" liczbę 11.00011, a później kolejno systematycznie dodając sekwencje 0011, zobaczymy w polu "Decimal" odpowiednik rzeczywistej wartości dziesiętnej. Spróbuj tak kombinować z bitami, aby uzyskać równo 3.1... niemożliwe? :) Pomijam tutaj zaokrąglenie samego konwertera, który dla odpowiednio długiej sekwencji po prostu zaokrągla liczbę ;)

Dla float:
http://www.binaryconvert.com/result_flo ... =051046049
Większą dokładność można uzyskać przy typach double (podwójnej precyzji):
http://www.binaryconvert.com/result_dou ... =051046049


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 lip 2014, o 20:26 
Offline
Nowy

Dołączył(a): 06 lis 2013
Posty: 5
Pomógł: 0

łoł, nie znałem tej gałęzi magii programowania, dzięki :D



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 5 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 1 gość


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO