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



Teraz jest 27 lut 2026, o 06:59


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 4 ] 
Autor Wiadomość
PostNapisane: 24 lis 2013, o 01:08 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 05 sie 2012
Posty: 97
Lokalizacja: Tarnów
Pomógł: 2

Witam

Mam taki mały problem ponieważ potrzebuje w programie wykonywać mnożenie na liczbach z podobnego zakresu jak przykład poniżej:

17 375 * 0,128

I wyświetlić wynik na lcd(hd44780).
Więc mam jakąś zmienną zapisaną na 16 bitach i wpadłem na pomysł żeby ją pomnożyć przez 128 a potem podzielić przez 1000 ale samo pomnożenie 17 375 * 128 daje liczbę ponad 2 miliony ! Nawet gdy spróbowałem robić to na zmiennych 32 bitowych wynik na lcd ciągle zerowy.
Może ktoś podsunie pomysł jak obejśc te "duże liczby" przy mnożeniu bo wynik już będzie liczbą poniżej 4000 więc spokojnie do zapisana na 16 bitach i wyświetlenia na wyświetlaczu.

____ edit:

Oświeciło mnie typem long. Problem rozwiązany, można wątek usunąć. Przepraszam za niepotrzebne "zaśmiecanie" forum :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 lis 2013, o 06:50 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 lut 2013
Posty: 376
Lokalizacja: Kłopoty-Stanisławy
Pomógł: 33

Mimo wszystko na przyszłość może się przydać

uint32_t - 0 - 4,294,967,296

_________________
50 znaków Atnela ....



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 lis 2013, o 08:45 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 05 sie 2012
Posty: 97
Lokalizacja: Tarnów
Pomógł: 2

No właśnie chodzi o to że samo uint32_t tutaj nie wystarczyło, choć zakres był wystarczający. Przykład:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

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

Wynik = 2224 (prawidłowy :D )



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 lis 2013, o 08:51 
Offline
Moderator
Avatar użytkownika

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

uint32_t jest jak najbardziej wystarczające tylko kolega jeszcze nie przeczytał o promocji do int w avr gcc i pewnie jeszcze nie raz bedzie sobie rwal sobie wlosy z glowy w podobnych sytuacjach.

gorąco polecam o tym poczytac a wyjasni sie koledze co zle robi
http://atnel.pl/domyslna-promocja-do-typu-int.html

------------------------ [ Dodano po: 4 minutach ]

podpowiem że wystarczyło napisać to np tak

zmienna1 = (17375ul*128)/1000ul

a w przypadku zmiennych ew zastosowac jawne rzutowanie do uint32_t ale więcej masz wartykule

_________________
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  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 4 ] 

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