Kezdőoldal » Számítástechnika » Programozás » C++-ban érdemes az alapból...

C++-ban érdemes az alapból megadott függvényeket használni, vagy gyorsabb, ha sajátot készítünk?

Figyelt kérdés

Pl. érdemes saját abs(), sqrt(), pow() függvényeket csinálni, hogy gyorsabban lefussanak?


És négyzetre emelésnél érdemesebb kétszer összeszorozni magát a számot, mint függvényt használni?


Sebesség illetve méret tekintetében kérdezem.


2020. aug. 7. 18:20
1 2
 11/18 anonim ***** válasza:

Én megnéztem gyorsan ezt:


#include <cmath>

int main() {

int a = 5 * 5;

}


És ezt:


#include <cmath>

int main() {

int a = pow(5, 2);

}


Nálam pontosan ugyanarra az assemblyre fordulnak:


_main:

LFB231:

.cfi_startproc

push ebp

.cfi_def_cfa_offset 8

.cfi_offset 5, -8

mov ebp, esp

.cfi_def_cfa_register 5

and esp, -16

sub esp, 16

call ___main

mov DWORD PTR [esp+12], 25

mov eax, 0

leave

.cfi_restore 5

.cfi_def_cfa 4, 4

ret

.cfi_endproc


#9 te milyen fordítót használsz? Megnézem azzal is.

2020. aug. 7. 19:42
Hasznos számodra ez a válasz?
 12/18 anonim ***** válasza:
Fordítsd le releasebe is. Ott még jobban optimalizálva van.
2020. aug. 7. 19:50
Hasznos számodra ez a válasz?
 13/18 anonim ***** válasza:

Megtettem, szintén megegyezik az assembly:


_main:

LFB264:

.cfi_startproc

push ebp

.cfi_def_cfa_offset 8

.cfi_offset 5, -8

mov ebp, esp

.cfi_def_cfa_register 5

and esp, -16

call ___main

xor eax, eax

leave

.cfi_restore 5

.cfi_def_cfa 4, 4

ret

.cfi_endproc


Tehát továbbra sem gyorsabb a pow, nemhogy sokkal, de semmivel sem.

Azért kérdezem, hogy milyen fordítót használsz. Megnézem azzal, mert már kíváncsi vagyok.

2020. aug. 7. 19:56
Hasznos számodra ez a válasz?
 14/18 anonim ***** válasza:

Segítek nektek szakértők, hogy miért lesz a pow esetén ugyanaz az assembly.

Úgy hívják, hogy optimalizáció. A fordító látja, hogy mit akarsz a pow-val csinálni, így fel van készítve rá. Akárcsak arra is, hogy kettővel való osztás maradékáért elég az utolsó bitet kiolvasni, és nem kell osztogatnia a számokat, és még sok hasonló gyakori művelet optimalizálva van. Éppen ezért mondtam, hogy a gyári beépített függvények jól optimalizálva vannak, a fordító ismeri őket (amúgy #1 vagyok). Ha te magad írod meg a függvényt, akkor meg nem biztos hogy tudja, mi a célod, így kisebb optimalizációkat tud csak sokszor végrehajtani.

2020. aug. 7. 21:24
Hasznos számodra ez a válasz?
 15/18 anonim ***** válasza:
53%

14: de jó, hogy jöttél!

Sose jöttünk volna rá.

2020. aug. 7. 21:30
Hasznos számodra ez a válasz?
 16/18 anonim ***** válasza:

Köszönöm #14, azt hittem részeg a fordító és nem tud különbséget tenni.

De #4 szerint a pow "sokkal gyorsabb", úgyhogy biztos így van, csak nem árulta még el, hogy milyen fordítóval.

2020. aug. 7. 21:38
Hasznos számodra ez a válasz?
 17/18 A kérdező kommentje:
Köszönöm a bőséges válaszokat. Azt tudjátok, hogy két egész szám gyökét, ahol az első szám az alap, a második a gyökkitevő, hogyan lehet kiszámolni? Esetleg van rá közelítő képlet? Sajnos az nem működik mint a pow()-nál, hogy sqrt(a,b).
2020. aug. 8. 00:30
 18/18 anonim ***** válasza:
Matek:) "b."-dik gyök "a" ugyanaz mint ha a-t az 1/b-edik hatványra emelnéd. Azaz a négyzetgyök "a" az "a" az 1/2. hatványon.
2020. aug. 8. 01:40
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!