[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