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



Teraz jest 28 lip 2026, o 23:35


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 7 ] 
Autor Wiadomość
 Tytuł: Zmienne FLOAT
PostNapisane: 5 sty 2014, o 16:01 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 06 paź 2011
Posty: 108
Pomógł: 0

Dlaczego w wyniku takiej operacji:

Kod:
float spal1=(20/6)*10;
   uint8_t spal=spal1;
   lcd_int(spal);


otrzymuje liczbę 30 ?

Tak jak ja to rozumiem , po wykonaniu obliczeń, w zmiennej spal1 powinienem mieć wynik 33.33333 a po rzutowaniu jej na typ INT w zmiennej spal 33. Teraz wygląda tak, jakby Float nie przechowywał wartości ułamkowych.

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 sty 2014, o 16:05 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27463
Lokalizacja: Szczecin
Pomógł: 1045

Po pierwsze to po co w ogóle do takiego celu float :( .... totalne marnotrastwo i pamięci flash i czasu obliczeń .... a można DOKŁADNIE to samo uzyskać na liczbach całkowitych

ale jak się uprzesz - to wystarczy napisać:

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


i już będziesz miał to czego oczekujesz od float

------------------------ [ Dodano po: 1 minucie ]

miej też na uwadze to:

http://mirekk36.blogspot.com/2013/04/ec ... float.html


Autor postu otrzymał pochwałę

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 sty 2014, o 16:09 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 06 paź 2011
Posty: 108
Pomógł: 0

Mirku, jak zwykle bezcenna pomoc :)

W całym programie tylko ten raz muszę wykonać dzielenie a każda z liczb w rzeczywistości jest zmienną. Myślałem jak to ogarnąć na liczbach rzeczywistych, ale się poddałem ;)

Oczywiście, czytałem, jak zwykle zresztą ostatnio, zanim zacznę pytać, zerkam do Twoich poradników :D

Nie zamierzam jej nigdzie wyświetlać. Dalej rozbijam ją na część dziesiętną i ułamkową i przetwarzam już tylko typ INT.

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 sty 2014, o 16:37 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27463
Lokalizacja: Szczecin
Pomógł: 1045

no to pomyśl ;)

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


wystarczy że pierwszą liczbę/zmienną pomnożysz przez dziesięć .... i już masz DOKŁADNIE to samo bez żadnych zmiennych float

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 sty 2014, o 16:46 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 07 lut 2013
Posty: 600
Pomógł: 47

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

to by było 3

------------------------ [ Dodano po: 6 minutach ]

ja zrobił bym to tak dla przejrzystości
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

ale oczywiści to mnożenie przez 1 jest niepotrzebne
i wynik mamy 33

_________________
https://www.instagram.com/myfirstquadcopter/



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 sty 2014, o 16:59 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 06 paź 2011
Posty: 108
Pomógł: 0

Tak, tylko że potrzebuję części dziesiętnych i całkowitych do dalszej pracy. A zmienne będą w zakresie 0-9999. Tylko jedna wartość w tym wyrażeniu będzie stałą. Brrr, za dużo zachodu. Jako leniwiec, poszedłem na łatwiznę i zbratałem się z Float ;)

ps.

A jednak uległem, zrobiłem koszernie i po bożemu. Nie ma już float ;)

------------------------ [ Dodano po: 15 minutach ]

A tak przy okazji, Float to naprawdę samo zło ? Aż tak bardzo pożera czas i zasoby AVRka żeby go unikać ?

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 sty 2014, o 12:16 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 12 lut 2012
Posty: 243
Lokalizacja: wlkp
Pomógł: 2

ixxl napisał(a):
Dlaczego w wyniku takiej operacji:

Kod:
float spal1=(20/6)*10;
   uint8_t spal=spal1;
   lcd_int(spal);


otrzymuje liczbę 30 ?

Tak jak ja to rozumiem , po wykonaniu obliczeń, w zmiennej spal1 powinienem mieć wynik 33.33333 a po rzutowaniu jej na typ INT w zmiennej spal 33. Teraz wygląda tak, jakby Float nie przechowywał wartości ułamkowych.

Napisałeś o rzutowaniu, zatem można byłoby także Twój fragment w ten sposób zapisać:
Kod:
float spal1=((float)20/(float)6)*10;
   uint8_t spal=spal1;
   lcd_int(spal);

Powinno zadziałać.



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: 7 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

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


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