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