[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