[elektro] C aritmetika?

hg12345 hg12345 at freemail.hu
Tue Apr 6 11:19:27 CEST 2010


  
  > Hi C-ben kikerülhető valamilyen módon, hogy 16bit * 16bit eredmény
> valóban 32 bit legyen? MPLAB C (GCC 4.03) elvégzi a szorzást az
> eredmény tényleg 32 bites (ez HW csinálja) majd ami biztos alapon a
> gyorsan törli a felsö 16 bitet és az így kapott eredményt tárolja egy
> long változóban. A művelet elött castolom akkor jó az eredmény, nem
> véletlen mert 32b * 322b szorzást csinál és HW helyet szubrutin.... A
> fordító program írói nem ismerték a szorzás tulajdonságát?!  Üdv

A nyelvet így definiálták, ez van. Esetleg túrni kell, hogy van-e valami
olyan "függvény", ami direkt szorzásra fordul. Pl. rotálás sincs a
nyelvben, csak shift, de azért elérhető szokott lenni.


Hi!

Bocs nem értek veled egyet, a nyelvnek ezt részét sehogyan se definiálták :-( ez mindig az adott megvalósítás függő!
Ha normálisan írják meg a MACRO-kat, akkor a balérték határozza meg az eredményt, esetleg figyelmeztet hogy nem fér el az eredmény a balértékben, de mindig a mostaninak megfelelő korrekt eredményt kapsz azzal a kitétellel, hogy méret váltás esetén is jó az eredményed.

Mivel elérhető a forrás, megnéztem a MPLABC30-ban optimalizálták a szorzó rutin :-) pl.: 32*32 szorzásból kihagytak 1db elemi szorzást és 2db elemi összeadást. Ezzel nincs is baj ameddig a 32 biten  maradsz, de ha az eredmény átmenetileg átlépi a 32 bitet (egy szorzásnál ez nem lehetetlen, főleg ha utána osztás is van...) akkor mindent 64 bitre kell konvertálni is bizony itt már tetemes a utasításban a különbség.




----------------------------------------
          elektro[-flame|-etc]



More information about the Elektro mailing list