[elektro] C cast kérdés

István Vomberg vomberg at chemotron.hu
Sun Apr 5 18:47:20 CEST 2009


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]
>
>   



More information about the Elektro mailing list