[elektro] mikroC PRO for PIC32 ceil probléma
SZIGETI Szabolcs
szigiszabolcs at gmail.com
Tue Nov 19 11:21:02 CET 2013
Hali!
Ez 10 hatványos ábrázolásnál ez a jelenség ugyanúgy létezik, csak más
számokkal értelemszerűen. Vagyis számábrázolási alap változtatásával nem
fogod tudni kikerülni. (Lebegőpontos ábrázolás külön bezavar a véges
mennyiségű tizedes (kettedes?) jegy által okozott pontosságvesztésnél
különböző nagyságrendű számokkal végzett műveltnél.) Nem mellesleg
lebegőpontos számolásnál ezt mindig át kell gondolni, nagyon sok
kellemetlen meglepetéstől óvhatod meg magad.
Ha átgondolod a műveletek sorrendjét és megfelelő helyen kerekítesz, stb.
azzal sokat javíthatsz.
Szabolcs
2013. november 19. 11:05 Nagy Sándor írta, <nasa at 68.hu>:
>
>
> Már lassan kezdek belenyugodni, csak azért mégsem értem azt, hogy a
> mikroC-ben nincs egy olyan számformátum, amivel akár 2 tizedes jegyig
> sem lehet törtekkel számolni!
>
> Nem azt jelenti hogy nem tudom megcsinálni, de ha kitalálok magamnak egy
> számformátumot, akkor ezek használatakor minden matematikai művelet
> saját függvényt igényel!
>
> emellett biztos van olyan alkalmazás, ahol megfelelhet ez a szám
> ábrázolási mód, de hiába töröm a fejem, nem jut eszembe olyan, ahol ez
> megfelelő lehet, persze tuti van, és csupán hatalmas kíváncsiságom miatt
> érdekelni is, hogy mi lehet az a terület, ahol azt feltételezem egy
> szoftverben, hogy az általam használt matematikai műveletek 2 tizedes
> jegyig pontosak, de ez mégsem igaz
>
> Alapvetően, mint teljesen kezdő mikroC felhasználó, nagyon sok mindent
> furcsállok, például nem tud két tömböt összehasonlítani, még nem is az a
> nagyobb gond, hanem az, hogy a fordító sem figyelmeztet rá, hogy ez nem
> fog helyes eredményt adni!
>
> ---
>
> Üdvözlettel: Nagy Sándor
>
> 2013-11-19 10:30 időpontban Gergely Vakulya ezt írta:
>
> > Udvozletem!
> >
> > Ez azert van, mert a lebegopontos szamokat az egyetek tulnyomo
> > reszeben nem az altalunk megszokott normal alakban
> > (mantissza*10^exponens) alakban taroljuk, hanem mantissza*2^exponens
> > alakban. Es ha te egy egeszet leosztasz 100-zal (ami nem 2-hatvany),
> > akkor ott kis kerekitesi hibak adodhatnak.
> >
> > 73/DX
> > HA4UC Gergo
> >
> > On 11/16/13, Nagy Sándor <nasa at 68.hu> wrote:
> >
> >> Sziasztok. nem tudom mi lehet a gond, de már kiborultam tőle. adott egy
> float változóban tárolt szám, ezt szeretném 2 tizedesre kerekíteni. ez ugye
> ennyi lenne: kerekített_ket_tizedesre = (ceil(kerekítendo_float * 100))
> /100); pl 22.95666 lenne 22.96 a legfurább dolog, hogy kb 10 esetből
> nyolcszor jól csinálja, kétszer nem. amikor nem jó akkor eleve nem kát
> tizedest ad vissza, hanem az eredeti számnak megfelelő tizedesekkel, de
> ráadásul nem is azt: egy I2C-s hőmérsékletet olvasok ki, ez teszem egy
> signed int -be ezzel az alábbi műveletet kell végezzem: float_eredmeny =
> (olvasott_int/480)+42,5 ez a táblázat első sora, ma olvasott_int
> float_eredmeny float_kerekitett -9455 22,80208 22,80999 -9219 23,29375
> 23,29999 -9379 22,96041 22,96999 minden esetben a plusz tizedes jegyek az a
> 3 db kilences. a float_eredmeny -t FloatToStr() függvénnyel konvertálom át
> lehet a hiba oka a FloatToStr függvény, hogy az szedi össze valahonnan a
> kilenceseket?
> de
> amikor jól működik akkor meg miért nem? -- Üdvözlettel: Nagy Sándor
> ----------------------------------------- elektro[-flame|-etc]
>
> -----------------------------------------
> elektro[-flame|-etc]
More information about the Elektro
mailing list