Arduino a float

Sekcia určená pre Arduino nadšencov

Moderátor: Moderátori

TomasNM
Zaslúžilý člen
Zaslúžilý člen
Príspevky: 1371
Dátum registrácie: 22 Jan 2012, 19:24
Bydlisko: Nové Mesto nad Váhom
Vek: 43

Arduino a float

Príspevok od používateľa TomasNM » 07 Feb 2017, 15:47

Zdravim pani.

Pracujem na jednom PID regulatore a narazil som na jednu nezrovnalost.
Definicia typu float obsahuje tuto veticku:
Floating-point numbers can be as large as 3.4028235E+38 and as low as -3.4028235E+38.
Mne vsak nerobi problem pocitat s cislom 1000,00.
Ako to teda u tohto typu funguje? Nikde som sa to totiz nedocital.
Je tam nejaka automaticka matematika,ktora pri vyssom celom cisle degraduje presnost za desatinnou bodkou?
Potrebujem presnost na 4 desatinne miesta,ake vysoke cislo to pri tejto presnosti zvladne?
Alebo je cela moja teoria uplne nespravna a funguje mi to nejakym zazrakom?

Dakujem za vysvetlenie.
0

Používateľov profilový obrázok
lucky62
Zaslúžilý člen
Zaslúžilý člen
Príspevky: 1151
Dátum registrácie: 14 Feb 2012, 20:16
Bydlisko: Liptovský Mikuláš, SK

Re: Arduino a float

Príspevok od používateľa lucky62 » 07 Feb 2017, 16:02

Nerozumiem tejto vete:
TomasNM napísal: Mne vsak nerobi problem pocitat s cislom 1000,00.
Neviem, ako chápeš túto definíciu:
TomasNM napísal: Floating-point numbers can be as large as 3.4028235E+38 and as low as -3.4028235E+38.

najmenšie číslo je: -3.4028235 * 10^38 (je to záporné číslo)
najväčšie číslo je: +3.4028235 * 10^38 (kladné číslo)
Presnosť je pravdepodobne tých 7 desatinných miest, s ktorými sú tie čísla zobrazené. (to som si nie celkom istý, lebo vnútorne to môže počítať s väčšou presnosťou - niekde by to malo byť zdokumentované)
0
....môj bazar....

...Nikdy sa nehádaj s blbcom...

TomasNM
Zaslúžilý člen
Zaslúžilý člen
Príspevky: 1371
Dátum registrácie: 22 Jan 2012, 19:24
Bydlisko: Nové Mesto nad Váhom
Vek: 43

Re: Arduino a float

Príspevok od používateľa TomasNM » 07 Feb 2017, 16:18

Tych +/- 3.4cca je udavane v referenciach: https://www.arduino.cc/en/reference/float
Rozumiem tomu tak,ze:
A) cisla nad tento rozsah(pretecenie) su jednoducho ignorovane a pri prekroceni 3.4 sa zacina zasa od -3.4 atd.(podobne ako u integer).
B) ak je pouzite cislo nad tento rozsah,znizi sa presnost za desatinnou ciarkou.
Ja vsak pouzivam aj daleko vyssie hodnoty,ako 3.4(tych 1000.00),tak mi to A nedava zmysel.

Teraz som si vsimol ten doplnok * 10^38.
Tak to som uz uplne blby z toho,pretoze tak by sa 3.4 vynasobilo o 38 nul????
0

Používateľov profilový obrázok
lucky62
Zaslúžilý člen
Zaslúžilý člen
Príspevky: 1151
Dátum registrácie: 14 Feb 2012, 20:16
Bydlisko: Liptovský Mikuláš, SK

Re: Arduino a float

Príspevok od používateľa lucky62 » 07 Feb 2017, 16:36

TomasNM napísal:Tak to som uz uplne blby z toho,pretoze tak by sa 3.4 vynasobilo o 38 nul????
Presne tak, float čísla sa v pamäti držia vo formáte mantisa + exponent. Exponent je vždy celé číslo. Mantisa je desatinné číslo s danou presnosťou.
0
....môj bazar....

...Nikdy sa nehádaj s blbcom...

peterple
Ultimate člen
Ultimate člen
Príspevky: 2328
Dátum registrácie: 25 Jún 2013, 21:06
Bydlisko: Krajné
Vek: 57
Kontaktovať používateľa:

Re: Arduino a float

Príspevok od používateľa peterple » 07 Feb 2017, 17:58

predpoklad A aj B je nesprávny. Každé float číslo sa interne normalizuje na x.xxxxxx * 10^ee
tvojich 1000.00 je 1.00000xx *10^3 alebo aj 0.999999xx*10^4
Float čísla sa totiž málo kedy trafia presne na int. vždy tam niečo prevyšuje alebo chýba.

Ja len potvrdím že číslo v danom rozsahu má 6 až 7 platných cifier. A pozor na AVR si nepomôžeš ani pomocou double. Teda vo avr-gcc
https://gcc.gnu.org/wiki/avr-gcc
Ale pre teba je tých 6 cifier asi dostatočných.

Najjednoduchšie je to neriešiť. Áno funguje to nejakým zázrakom. jeden float zaberá 32 bitov.
https://en.wikipedia.org/wiki/Single-pr ... int_format
0
Ukáž múdremu chybu a on sa ti poďakuje. Ukáž chybu hlupákovi a on sa urazí.

TomasNM
Zaslúžilý člen
Zaslúžilý člen
Príspevky: 1371
Dátum registrácie: 22 Jan 2012, 19:24
Bydlisko: Nové Mesto nad Váhom
Vek: 43

Re: Arduino a float

Príspevok od používateľa TomasNM » 08 Feb 2017, 13:01

Pani,

dakujem za vysvetlenie.
Trochu som to pochopil,akurat som nesiel do detailov.
Takze som z toho pochopil,ze to bude fungovat OK a moje predpoklady boli nespravne.
0

Napísať odpoveď
  • Podobné témy
    Odpovedí
    Zobrazení
    Posledný príspevok