[elektro] mikroC PRO for PIC32 ceil probléma
Nagy Sándor
nasa at 68.hu
Tue Nov 19 12:36:32 CET 2013
É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]
More information about the Elektro
mailing list