Hogyan lehet ciklussal egy tetszőleges számot tetszőleges hatványra emelni? (c nyelvben) ;
Ciklus nélkül
pl:
int a=5;
a=pow(a,2);
printf("%i",a);
de így "lecsípi" a végét így az eredmény 24, ami helytelen.
Ezért akkarom ciklussal, vagy esetleg ha egész számok esetén lenne, olyan függvény ami hatványoz helyesen az is jó lenne.
Erre az a válasz hogy vagy vannak bizonyos gagyi fordítók amik nem ismerik fel a négyzetre emelés műveltét.
A gcc ha látja hogy négyzetre kell emelni, így emel:
5*5
A gcc-nél ha be van kapcsolva az optimizer akkor fordítási időben kiszámolja az eredményt és a programban már nem lesz négyzetre emelés hanem egy 25-ös konstans.
Bizonyos gagyi fordítók meghívják minden esetben a pow() függvény és általános hatványozást végeznek:
5^2
Ezzel az a bökkenő hogy a CPU/FPU csak 2-es számrendszerben tud műveleteket végezni, ezért csak a következő 2 hatványozással kapcsolatos műveletet ismerik:
- log2(x)
- 2^x
Így az 5^2 átalakul ilyenné:
2^(2*log2(5)) = 2^(2*2.321928) = 2^4.643856 = 24.99999
Hogy az online fordítókon is tesztelhesd ezt, ezt írd be:
int a = 5;
a = pow(2, 2*log2(5));
printf("%d\n", a);
A kimenet 24 lesz.
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!