Skocz do zawarto┼Ťci

Float...okreslenie ilosci cyfr po przecinku


Pomocna odpowied┼║

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 przez farmaceuta
Link to post
Share on other sites
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.

  • Pomog┼ée┼Ť! 1
Link to post
Share on other sites
(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 przez farmaceuta
Link to post
Share on other sites

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.

  • Pomog┼ée┼Ť! 1
Link to post
Share on other sites
Zarejestruj si─Ö lub zaloguj, aby ukry─ç t─Ö reklam─Ö.
Zarejestruj si─Ö lub zaloguj, aby ukry─ç t─Ö reklam─Ö.

jlcpcb.jpg

jlcpcb.jpg

Szukasz producenta PCB? Sprawd┼║ firm─Ö JLCPCB. Dlaczego warto?
┬á┬á ÔÇó Prototypy PCB 2-warstwowe za 2$ (gotowe w 24 godziny)
┬á┬á ÔÇó Prototypy PCB 4-warstwowe za 5$
┬á┬á ÔÇó Monta┼╝ SMT od 7$
┬á┬á ÔÇó Produkcja w profesjonalnej fabryce (zobacz film)
Sprawd┼║ te┼╝ ┬╗ Jak powstaje PCB? Wycieczka po fabryce

(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 przez farmaceuta
Link to post
Share on other sites

A mo┼╝e napisz co tak naprawd─Ö pr├│bujesz osi─ůgn─ů─ç, bo to wygl─ůda jak by┼Ť reimplementowa┼é typ float, tylko gorzej.

Link to post
Share on other sites

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..

Link to post
Share on other sites

Jak wystarczy 65k zakresu + 4 miejsca po przecinku, to zawsze mo┼╝esz wykorzysta─ç floaty __fp16,. Tylko dwa bajty.

Link to post
Share on other sites
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...

 

Link to post
Share on other sites

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.

  • Pomog┼ée┼Ť! 1
Link to post
Share on other sites

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).

 

  • Pomog┼ée┼Ť! 1
Link to post
Share on other sites
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..

Link to post
Share on other sites
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".

  • Pomog┼ée┼Ť! 1
Link to post
Share on other sites
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 

Link to post
Share on other sites
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).

  • Pomog┼ée┼Ť! 1
Link to post
Share on other sites
Zarejestruj si─Ö lub zaloguj, aby ukry─ç t─Ö reklam─Ö.
Zarejestruj si─Ö lub zaloguj, aby ukry─ç t─Ö reklam─Ö.

jlcpcb.jpg

jlcpcb.jpg

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

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!

Anonim
Do┼é─ůcz do dyskusji! Kliknij i zacznij pisa─ç...

×   Wklejony jako tekst z formatowaniem.   Przywr├│─ç formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Tw├│j link b─Ödzie automatycznie osadzony.   Wy┼Ťwietla─ç jako link

×   Twoja poprzednia zawarto┼Ť─ç zosta┼éa przywr├│cona.   Wyczy┼Ť─ç edytor

×   Nie mo┼╝esz wklei─ç zdj─Ö─ç bezpo┼Ťrednio. Prze┼Ťlij lub wstaw obrazy z adresu URL.

×
×
  • Utw├│rz nowe...

Wa┼╝ne informacje

Ta strona u┼╝ywa ciasteczek (cookies), dzi─Öki kt├│rym mo┼╝e dzia┼éa─ç lepiej. Wi─Öcej na ten temat znajdziesz w Polityce Prywatno┼Ťci.