Kezdőoldal » Számítástechnika » Programozás » C++-ban a szorzás gyorsabb,...

C++-ban a szorzás gyorsabb, ha saját függvényt írnak rá?

Figyelt kérdés

int number;

cin >> number;


int times;

cin >> times;



if (i = 0, i < times, i++)

{

result += number;

}


cout << result;


Ilyen kóddal, vagy hasonlóval, ha saját szorzásfüggvényt írna valaki, akkor gyorsabb lenne, mint a sima szorzás?


2022. máj. 24. 17:38
1 2
 1/12 anonim ***** válasza:
Ebben hol van a saját függvény? Egyébként semmivel sem gyorsabb. Miért lenne az? Ugyanannyi műveletet hajt végre a függvény is. Viszont kényelmesebb és áttekinthetőbb, ha többször is használni kell a kódban.
2022. máj. 24. 17:41
Hasznos számodra ez a válasz?
 2/12 A kérdező kommentje:

Vagyis:


int multiplication()

{

if (i = 0, i < times, i++)

{

result += number;

}


cout << result;

}

2022. máj. 24. 17:43
 3/12 anonim ***** válasza:
96%
Hű báttya, ezt ne erőltesd... De értjük a lényeget. A műveletigény pontosan ugyanakkora.
2022. máj. 24. 17:44
Hasznos számodra ez a válasz?
 4/12 anonim ***** válasza:
10%
l0l
2022. máj. 24. 17:45
Hasznos számodra ez a válasz?
 5/12 anonim ***** válasza:
88%
Kizárt, hogy te gyorsabb függvényt írsz, mint a nyelv beépített operátora.
2022. máj. 24. 17:45
Hasznos számodra ez a válasz?
 6/12 anonim ***** válasza:
0%
shaft
2022. máj. 24. 17:45
Hasznos számodra ez a válasz?
 7/12 anonim ***** válasza:
95%
Biztos, hogy nem lenne gyorsabb. Vannak persze olyan esetek, ahol lehet optimalizálni (pl. 2 hatványaival való osztás és szorzás esetén a biteltolás kitűnően működik, és gyorsabb is), de a sima egész-egész szorzást rendszerint az egyes fordítókban nagyon hatékonyan megírták.
2022. máj. 24. 17:50
Hasznos számodra ez a válasz?
 8/12 anonim ***** válasza:
89%
Mondjuk lehet, hogy jó lenne addig eljutni, hogy 1 függvényt meg tudsz írni önállóan, mielőtt a C++ fordítónál szeretnél hatékonyabb kódot írni.
2022. máj. 24. 20:44
Hasznos számodra ez a válasz?
 9/12 anonim ***** válasza:
88%

Azért ennél vannak többszázszor gyorsabb egész szorzó eljárások. Mert ha jól látom itt egész számot szorzol egész számmal.


1./ Ez annyiszor fut le amennyi a szorzó. Eleve ha már ezt az utat választod meg kéne nézni, hogy a szorzó vagy a szorzandó a kisebb, mert ha a szorzandó a kisebb akkor ha megcseréled már azzal gyorsítasz a programodon, és az egy összehasonlítás időigénye lényegesen kisebb, mint esetleg több százszor végig menni a cikluson. Pl. nézzük az alábbi esetet:


number=3 times=123456789

3*123456789 ha így hajtod végre a ciklusod 123456789 esetben fog végrehajtódni, ha előtte megnézed, hogy melyik a kisebb és megfordítod már csak 3x fog végrehajtódni, ezzel már gyorsítottunk nem keveset a programon.


2./ Ha két int-et kell szorozni akkor lehet tudni, hogy az int az 4 byte (32 bit). Két 32 bites számot összeszorozni eleve problémás, mert az eredmény 64 bites lesz. Érdemes egy ellenőrzést csinálni eleve az elején, hogy a két szám szorzata belefog-e férni a 32 bitbe, vagy sem. Vagy eleve feltételezzük, hogy belefér és nem foglalkozunk vele.

De ha int-et szorzol int-el és az eredményt tárolod long long int-be (64 bit) vagy megelégszel, hogy az eredmény 32 bit marad, akkor is létezik olyan eljárás, hogy maga a ciklus max. 32x fut le bármit csinálsz, és magában a ciklus törzsben egy feltételes utasítás és két olyan művelet szerepel amelyiket gyakorlatilag az összes proci ALU-ja el tud végezni, azaz kb. 1:1-ben fordítható gépikódra. így a teljes 32 bites tartományban kb. 100 lépésből bármely két szám szorzata megkapható.


3./ A mai procik ALU-jában benne van az egész szorzás, és a proik FPU-ja lebegőpontos számokat is képes összeszorozni gyakorlatilag "hardwerből" és a fordító ezt fogja meghívni. Ezzel nagony nehéz versenyezni. Max. akkor ha véletlenül olyan prociba fut bele az ember amelyik nem tud szorozni (régebbi 8 bitesek, kisebb 8 bites mikrokontrollerek). Azoknál még van értelme bajlódni a szorzással. De azoknál sem a te algoritmusoddal szoroznak, hanem amit 2-ben írtam, a max 32x lefutó ciklusos változatot használják, mert az kezelhető időben is. És nem lesz beláthatatalan a futásidő.

2022. máj. 24. 21:00
Hasznos számodra ez a válasz?
 10/12 anonim ***** válasza:
52%

"C++-ban a szorzás gyorsabb, ha saját függvényt írnak rá?"


Ez nem a nyelvtől, hanem a fordító képességeitől függ.

A mai procikban a szorzóáramkörök hülyére vannak optimalizálva.

ezen túltenni csak úgy lehet, ha figyeljük az operandusokat és ha azok kettő hatványai, akkor shiftelünk. Ezért írtam a shaft-ot, hátha valakinél valami derengeni kezd, felébred csipkerózsika álmából és emlékszik a tanultakra.

2022. máj. 24. 21:13
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!