Az osztás vagy a szorzás számításigényesebb C++-ban?
Ez inkább architektúra és nem nyelv függő:
Pentium 4 referencia:
x87 FPU
Szorzás:1~5 órajel
Osztás: 2~7 órajel
x86 CPU
Szorzás: 3 órajel
Osztás: 40 órajel
Ref: [link]
Ezért érdemes lebegőpontos számokat használni, meglepő módon gyorsabb az osztás, mint egész számmal. Ennek az az oka, hogy egész számú osztás esetén valójában egy algoritmus fut le: [link] Lebegő pontos szám esetén pedig egy erre való elektronika végzi a feladatot. (IEEE 754 szabvány)
Ez az MMX és SSE instrukció készlet miatt gyorsulhat feltéve ha nincs a műveletek között elágazás, hiszem az kisöpörné a pipeline-t és nem valósul meg az SIMD optimalizáció.
Egy jobb fordító továbbá kicseréli a kettő hatványaival való osztást shift left műveletre.
Hármasnál a pont.
Architektúra függvénye, nem a nyelvé.
Kapásból processzoronként változó az utasításkészlet, így míg egy x86 tud szorozni és osztani, számos RISC processzor nem tud ilyet, így pl. a szorzást sorozatos összeadással kell megvalósítani ezen chipek esetében.
Emellé beúszik még a képbe a lebegőpontos számok kezelése, illetve a lebegőpontos egység megléte amely megintcsak architektúra-függő és befolyásolja a végeredményt.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!