[elektro] C cast kérdés
hg12345
hg12345 at freemail.hu
Sun Apr 5 18:52:31 CEST 2009
Megnéztem, optimalizáció után nem látom milyen kódot generál, de hogy nem müködik az biztos.
Optimalizáció nélkül jó az eredmény. A forditó GNU C 4.03 alapú PIC24-s.
Direkt irtam, hogy nem akarom lebegöpontos müveletekket, és nem a sebesség miatt.
Szerintem fixpontos változók esetén nem számolhat belül lebegöpontos osztással az biztos!
"István Vomberg" <vomberg at chemotron.hu> írta:
> Ha nem időkritikus a futás, akkor én double-ra castolnám _mindegyik_
> változót és long-ra az egészet.
>
> e = (long)(((double)m1 * (double)m2 ) / (double)div);
>
> Így nem a fordítóra meg az optimalizálóra van bízva. Mivel maga az
> osztás lebegőpontos művelet, a (long long) castolásod is tovább lesz
> castolva float-ra vagy double-ra, csak nem látod.
>
> Futásidőben így garantáltan hosszabb mint ha hagynád a fordítót molyolni
> az ügyön, viszont garantáltan az történik amit szeretnél.
>
> hg12345 írta:
> > long m1,m2,div,e;
> >
> > Adott a következő müvelet:
> >
> > e = ( m1 * m2 ) / div ;
> >
> > a feinti müvelet sor eredménye elég sok esetben kétes, de ha egy kis kiegészitést teszek:
> >
> > e = (m1 * (long long) m2) / div ;
> >
> > akkor hibatlannak kell lennie !
> >
> > igy elméletileg a többi változót kényszer cast-olja a C vagy csak én goldolom igy, és mi történik optimalizáció után?
> >
> > Ezt hogyan oldják meg C berkeken belül.
> >
> > Nem akarok float és más lebegöpontos számításokat és nem szeretnék átmenetileg se egy Long Long tipusú változót.
> >
> > Üdv
> >
> >
> >
> >
> > -----------------------------------------
> > elektro[-flame|-etc]
> >
> >
>
> -----------------------------------------
> elektro[-flame|-etc]
>
More information about the Elektro
mailing list