[elektro] mikroC PRO for PIC32 ceil probléma

SZIGETI Szabolcs szigiszabolcs at gmail.com
Tue Nov 19 12:52:44 CET 2013


Hali!

Minden C tud fixpontos ábrázolást. Long, int, char. Oda teszed a pontot
(vesszőt), ahova akarod.
A C gép közeli nyelv, így az alatta lévő hardver számábrázolását fogja
leginkább használni. Így egészekkel és (rendszerint manapság IEEE754
formáítumú) lebegőpontosokkal lehet játszani.

Fejlettebb nyelvekben van mindenféle csoda, mint bignum, stb. Meg persze
C-ben is lehet írni erre függvényeket, de szerintem a hőmérséklet 2 tizedes
kiírására van egyszerűbb megoldás is.

Szabolcs



2013. november 19. 12:36 Nagy Sándor írta, <nasa at 68.hu>:

>
>
> Értem már, akkor csak az marad a kérdés, hogy csak az én fordítóm nem
> tud semmilyen fix pontos számábrázolási módot, vagy az általánosan
> elmondható a C nyelveknél?
>
> ---
>
> Üdvözlettel: Nagy Sándor
>
> 2013-11-19 12:31 időpontban Móczik Gábor ezt írta:
>
> > 2013.11.19. 11:05 keltezéssel, Nagy Sándor írta:
> >
> >> 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!
> >
> > Ha tudod hogy 2 tizedesjegy kell, akkor tárold kvázi fixpontos
> > formátumban, integerként, még a végrehajtási sebesség is nagyságrendileg
> > nagyobb lesz.
> >
> > Tárolod a számok 100-szorosát, ezzel számolsz mindehol, ha meg kell
> > jeleníteni, akkor pedig ugyanúgy jeleníted meg mint egy egész számot,
> > csak a vége előtt két karakterrel kiteszel egy pontot a kijelzőre.
> >
> > Ha a printf függvént használod, akkor mondjuk
> > printf("%d.%02d",x/100,x%100)
> >
> >> 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
> >
> > Nem minden egyes szám képezhető le decimális-->bináris konverzióval,
> > vannak lyukak. Ettől még azok a lehető legközelebb vannak a valós
> > számhoz ami matematikailag kijön, ez alkalmas matematikai számítások
> > végzésére, hogy a részeredmények a lehető legkevesebb kerekítési hibát
> > tartalmazzák.
> >
> > Nem való egyenlőség összehasonlításra, és nem hatékony, nem célszerű
> > csak azért használni, hogy legyen benne tizedespont. Erre sokkal
> > hatékonyabb a fenti fixpontos ábrázolás.
> >
> >> 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!
> >
> > Mert a C nyelvben nincs tömb összehasonlító operátor, mitöbb, tömb sincs!
> >
> > A tömb egy egyforma elemeket tartalmazó memóriaszakaszra mutató pointer.
> > Ebből következik, hogy az összehasonlítás a két pointer értékét
> > hasonlítja össze, nem a pointer által mutatott területen található
> > értékeket.
> >
> > A memcmp függvénnyel lehet memóriaterületek tartalmát összehasonlítani.
> >
> > -----------------------------------------
> > elektro[-flame|-etc]
>
> -----------------------------------------
>           elektro[-flame|-etc]


More information about the Elektro mailing list