[elektro] mikroC PRO for PIC32 ceil probléma
Móczik Gábor
pm_levlista at progzmaster.hu
Tue Nov 19 12:31:16 CET 2013
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.
More information about the Elektro
mailing list