farmaceuta Napisano Luty 20, 2021 Udostępnij Napisano Luty 20, 2021 (edytowany) Witam Panow.... Da sie jakos okreslic ilosc cyfr po przecinku?? Np. mam liczbe 54.123 i chcialbym zrobic "czary mary" po ktorym bym wiedzial ze liczb po przecinku mam trzy... Bede wdzieczny za pomoc.. Pozdrawiam🙂 Edytowano Luty 20, 2021 przez farmaceuta Cytuj Link do komentarza Share on other sites More sharing options...
ethanak Luty 20, 2021 Udostępnij Luty 20, 2021 21 minut temu, farmaceuta napisał: Da sie jakos okreslic ilosc liczb po przecinku?? Nie ma tu czegoś takiego jak ilość cyfr (a nie liczb) po przecinku - jest tyle ile sobie chcesz wyświetlić. Typ float nie jest dokładny, czyli te 54.123 to raczej 54.12299999999999755573298899 (i tak dalej) w reprezentacji dziesiętnej. 1 Cytuj Link do komentarza Share on other sites More sharing options...
farmaceuta Luty 20, 2021 Autor tematu Udostępnij Luty 20, 2021 (edytowany) Chodzi o to ze bede mial duzo zmiennych typu float ktore maja dosc niski zakres np 35.50... Gdybym mogl wyciagnac ilosc cyfr po przecinku to moglbym tego float pomnozyc *10/*10...co by mi dalo wynik 3550 ktory sie miesci w zakresie 12 bitow..do tego informacja ile razy mnozylem przez 10 do uzyskania liczby calkowitej, w przykladzie 2 razy czyli zapisuje to powiedzmy w kolejnych 2 bitach i w sumie mam tylko 14 bitow zamiast 32...przesyl bedzie przez lora rf wiec rozmiar pakietow ma duze znaczenie.. Edytowano Luty 20, 2021 przez farmaceuta Cytuj Link do komentarza Share on other sites More sharing options...
ethanak Luty 20, 2021 Udostępnij Luty 20, 2021 No ale nie możesz bo coś takiego nie istnieje. Problem w tym, że zmienne float są przechowywane w postaci binarnej, a np. 0.1 nie da się dokładnie w tej postaci zapisać i dla procesora 0.1 i 0.099999999 to to samo. Musisz kombinować inaczej. 1 Cytuj Link do komentarza Share on other sites More sharing options...
Polecacz 101 Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Produkcja i montaż PCB - wybierz sprawdzone PCBWay! • Darmowe płytki dla studentów i projektów non-profit • Tylko 5$ za 10 prototypów PCB w 24 godziny • Usługa projektowania PCB na zlecenie • Montaż PCB od 30$ + bezpłatna dostawa i szablony • Darmowe narzędzie do podglądu plików Gerber Zobacz również » Film z fabryki PCBWay
farmaceuta Luty 20, 2021 Autor tematu Udostępnij Luty 20, 2021 (edytowany) Hmmm...tylko jak? No nic mi nie swita..a np. float 35.50 rzutuje na int i mam 35, no i teraz odejmujac int od float sprawdzam czy otrzymuje 0 , mnoze i licze ile razy...? Edit: Oczywiscie wynik po mnozeniu zamieniam na liczbe calkowita i dopiero wtedy operuje na bitach.. Edytowano Luty 20, 2021 przez farmaceuta Cytuj Link do komentarza Share on other sites More sharing options...
deshipu Luty 20, 2021 Udostępnij Luty 20, 2021 A może napisz co tak naprawdę próbujesz osiągnąć, bo to wygląda jak byś reimplementował typ float, tylko gorzej. Cytuj Link do komentarza Share on other sites More sharing options...
farmaceuta Luty 20, 2021 Autor tematu Udostępnij Luty 20, 2021 Generalnie na dzien dzisiejszy to nie robie nic...ksztalce sie na przyszlosc. Chodzi o to ze mam np. 10 zmiennych float (40 bajtow) ktore maja takie zakresy liczb ze po pomnozeniu i rzutowaniu na int zajely by juz powiedzmy 15-20 bajtow co przy przesyle przez rf juz roznice robi tym bardziej ze lora jest dosyc wolna jesli chce sie zachowac dobra czulosc odbioru.. Cytuj Link do komentarza Share on other sites More sharing options...
kaworu Luty 21, 2021 Udostępnij Luty 21, 2021 Jak wystarczy 65k zakresu + 4 miejsca po przecinku, to zawsze możesz wykorzystać floaty __fp16,. Tylko dwa bajty. Cytuj Link do komentarza Share on other sites More sharing options...
farmaceuta Luty 21, 2021 Autor tematu Udostępnij Luty 21, 2021 10 godzin temu, farmaceuta napisał: Oo..nawet nie wiedzialem ze takie cos istnieje jak dwu bajtowy float (poczatkujacy Jestem)...napewno duzo ulatwia mi takie rozwiazaniej lecz dalej moze byc przydatne "przerabianie" bo duzo licz bedzie rowniez z nizszych zakresow jak np 100.0 / 255.0 etc...ktore mozna odchudzic do bajta... Cytuj Link do komentarza Share on other sites More sharing options...
kaworu Luty 21, 2021 Udostępnij Luty 21, 2021 Istnieje, ale z ograniczeniami i nieoficjalnie, tylko jako "storage type" i jego obsługa w kompilatorach jest... no, rożna (GCC obsługuje). Pełna obsługa jest zdaje się tylko w kartach graficznych i tego typu zabawkach. Jeżeli znasz dokładny potrzebny zakres, to zawsze możesz pomnożyć przez coś i zachować jako n-bitowy int, wyrównany do 8. Znaczy w 3 bajtach można upchnąć 2 12bit liczby. Albo 12 po 4bit. 1 Cytuj Link do komentarza Share on other sites More sharing options...
ethanak Luty 21, 2021 Udostępnij Luty 21, 2021 Tyle że weź pod uwagę to, że w najprostszym przypadku musisz powiedzieć stronie odbierającej jakiej długości liczbę przesyłasz (8/16 bitów). Czyli co najmniej jeden dodatkowy bit. Ogólnie kodowanie zmiennej długości może być lekko upierdliwe (vide UTF-8, którego pewnie jakaś połowa z tu obecnych nie rozumie, ew. - to już dla bardziej dociekliwych - protokół MySQL-a). 1 Cytuj Link do komentarza Share on other sites More sharing options...
farmaceuta Luty 21, 2021 Autor tematu Udostępnij Luty 21, 2021 14 minut temu, kaworu napisał: Jeżeli znasz dokładny potrzebny zakres, to zawsze możesz pomnożyć przez coś i zachować jako n-bitowy int, wyrównany do 8. Znaczy w 3 bajtach można upchnąć 2 12bit liczby. Albo 12 po 4bit. Dokladnie o to mi chodzi...zeby maksymalnie "skompresowac" liczby zamiast marnowac 4 bajty na przeslanie np. 125.0 plus informacja ile razy musialem mnozyc zeby wyszla liczba calkowita..zamiana na liczbe calkowita i operacje na bitach zeby wrzucic to do bajtow.. 17 minut temu, ethanak napisał: Tyle że weź pod uwagę to, że w najprostszym przypadku musisz powiedzieć stronie odbierającej jakiej długości liczbę przesyłasz (8/16 bitów). Czyli co najmniej jeden dodatkowy bit. Po stronie odbiorczej odpowiednio wyciagam liczby, rzutuje do float (chyba sie da?) i dziele przez 10 tyle ile razy mnozylem i mam spowrotem te powiedzmy 35.50... No chyba ze pierdoly opowiadam to mozna mi liscia wyplacic..;-) poczatkujacy Jestem... Dziekuje wam za pomoc! 🙂 jak cos wymyslicie lepszego to slucham bardzo uwaznie.. Cytuj Link do komentarza Share on other sites More sharing options...
ethanak Luty 21, 2021 Udostępnij Luty 21, 2021 Przed chwilą, farmaceuta napisał: odpowiednio wyciagam liczby Kluczowe słowo: odpowiednio. Skąd będziesz wiedział, czy dane 8 bitów to jeden bajt ośmiobitowej liczby, czy pierwsza połówka fp16? 2 minuty temu, farmaceuta napisał: dziele przez 10 tyle ile razy mnozylem Czyli tak jak zauważył @deshipu - próbujesz zrobić swojego floata tylko gorszego. 4 minuty temu, farmaceuta napisał: jak cos wymyslicie lepszego to slucham bardzo uwaznie Trudno wymyślać rozwiązanie jeśli się nie wie do czego ma to służyć (bo nie chodzi tu o "do przesyłania liczb przez lora" tylko co te liczby oznaczają). Dwa rozwiązania które narzucają się same: wspomniany już fp16 albo 16-bitowy int (ściślej ułamek fixed point). Ewentualnie właśnie jakieś kodowanie zmiennej długości... ale musiałbym wiedzieć co te liczby oznaczają, jaka jest wymagana dokładność i jaki jest zakres każdej z nich... i to nie ogólnie "to temperatura" tylko szczegółowo, np. "temperatura w pomieszczeniu z dokładnością do pół stopnia" lub "temperatura tygla do topienia ołowiu z dokładnością do 5 stopni". 1 Cytuj Link do komentarza Share on other sites More sharing options...
farmaceuta Luty 21, 2021 Autor tematu Udostępnij Luty 21, 2021 3 minuty temu, ethanak napisał: Kluczowe słowo: odpowiednio. Skąd będziesz wiedział, czy dane 8 bitów to jeden bajt ośmiobitowej liczby, czy pierwsza połówka fp16? Tutaj musze przeprosic bo zamotalem...w sumie nie jest mi potrzebne "rozgryzienie" ile liczb po przecinku bede mial, bo poprostu bede to wiedzial i moge to na "sztywo" bez problemu uwzglednic...czyli zamieniam float do liczby calkowitej i zapisuje ja do maksymalnie najnizszego zakresu bitow...po odbiorze paczki bajtow poprostu odtwarzam tego float Cytuj Link do komentarza Share on other sites More sharing options...
ethanak Luty 21, 2021 Udostępnij Luty 21, 2021 1 minutę temu, farmaceuta napisał: zapisuje ja do maksymalnie najnizszego zakresu bitow A skąd będziesz przy odbiorze wiedział do jakiego to najniższego zakresu bitów tę liczbę skonwertowałeś? Dziesięć bitów? Osiem? Szesnaście? No - chyba że dla każdej liczby przypisana jest na sztywno ilość bitów (np. pierwsza ma zawsze siedem, druga trzynaście a trzecia szesnaście). Ale w takiej sytuacji każda liczba jest dekodowana niezależnie od pozostałych i może mieć swój prywatny kodek (np. logarytmiczny). 1 Cytuj Link do komentarza Share on other sites More sharing options...
Pomocna odpowiedź
Dołącz do dyskusji, napisz odpowiedź!
Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!