Kezdőoldal » Számítástechnika » Programozás » Hogyan lehet ciklussal egy...

2105as kérdése:

Hogyan lehet ciklussal egy tetszőleges számot tetszőleges hatványra emelni? (c nyelvben) ;

Figyelt kérdés

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.


2016. okt. 15. 13:35
1 2
 11/12 anonim ***** válasza:
Oké, lehet, hogy van, de nála miért jön elő és nálam vagy az online C-fordítókban miért nem?
2016. okt. 15. 21:22
Hasznos számodra ez a válasz?
 12/12 anonim ***** válasza:

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.

2016. okt. 16. 11:34
Hasznos számodra ez a válasz?
1 2

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!