Kezdőoldal » Számítástechnika » Programozás » Ha számokat adunk össze C++...

Ha számokat adunk össze C++ nyelven, akkor a kicsi és nagy számok összeadása között van különbség időben?

Figyelt kérdés

2012. aug. 31. 20:40
1 2 3
 1/23 iostream ***** válasza:
41%

Ha a méret alatt a típus méretét érted, akkor igen. Ha az ábrázolt szám matematikai értelemben vett nagyságát, akkor nem.


A platformnak van egy szélessége, ez asztali gépeknél 32 vagy 64 bit. Ezzel a mérettel dolgozik a leggyorsabban a gép, ezért szokott az int ekkora lenni.

2012. aug. 31. 21:20
Hasznos számodra ez a válasz?
 2/23 anonim ***** válasza:
Nincs. A C++ legtöbb szám adattípusát egy gépi ciklus alatt, a szám méretétől függetlenül össze tudja adni a számítógép. Az ennél nagyobbakhoz 2 gépi ciklus kell. Ez észrevehetetlen különbség.
2012. aug. 31. 21:24
Hasznos számodra ez a válasz?
 3/23 A kérdező kommentje:
0+0 ugyannyi idő, mint 1+1 és ugyanannyi mint 32000+32000?
2012. aug. 31. 22:02
 4/23 iostream ***** válasza:
Ez így van. Ez nem nyelvfüggő, a processzornak teljesen halálmindegy, hogy azon a 4-8 byteon belül melyik bitek vannak bebillentve, ugyanannyi idő alatt végzi el az összeadást.
2012. aug. 31. 23:41
Hasznos számodra ez a válasz?
 5/23 A kérdező kommentje:

na, azért ezt nem hiszem el.

a 0+valami szerintem hamarabb megy, mert a kódban biztosan van egy if erre az esetre, hogy térjen vissza a rögtön a bemeneti számmal, nem?

2012. szept. 1. 07:16
 6/23 anonim ***** válasza:
Mar miert lenne? Sokkal tobb ido kiertekelni az if-et, es utana az osszeadast, mint csak az osszeadast.
2012. szept. 1. 07:51
Hasznos számodra ez a válasz?
 7/23 iostream ***** válasza:
Az if megszakítja a futást, mivel feltételes ugrást jelent. Az összeadás meg egy utasítás. De ha nem hiszed el, nem tudok mit tenni :)
2012. szept. 1. 08:04
Hasznos számodra ez a válasz?
 8/23 anonim ***** válasza:

Ha konkrétan te azt írod bele a kódba, hogy :

int a;

a = 0 + 123;

akkor lehetséges, hogy a fordító optimalizálja a kódot, és simán annyi lesz belőle, hogy a = 123;

Sőt, ha azt írod bele, a = 123 + 456;, akkor azt is optimalizálja a fordító, és simán a = 579; lesz belőle.

DE: Ennek semmi köze a végrehajtás idejéhez, hanem fordítási időben történik.


Viszont, ha mindezt változókkal csinálod, pl:

int a = 0;

int kisszam1 = 5;

int kisszam2 = 6;

int nagyszam1 = 1234567;

int nagyszam2 = 3456789;


Ebben az esetben az a = kisszam1 + kisszam2; és az a = nagyszam1 + nagyszam2; utasítások végrehajtási ideje pontosan ugyanannyi idő lesz. A CPU két darab 32(vagy 64, platformtól függően) bit nagyságú értéket mindig ugyanannyi idő alatt ad össze, függetlenül attól, hogy milyen érték van bennük. Lusta vagyok elmagyarázgatni, hogy működik ez nagyon alacsony szinten, de nézz utána, ha ennyire érdekel:


[link]


[link]


Más a szituáció persze, ha valami bigint-es library-t használsz, mert ilyenkor nem feltétlenül férnek be az összeadandó számok egy regiszterbe, ilyenkor assembly szinten már nem egy sima ADD történik, hanem MOV-olgatni kell, meg ADC, meg stb. Tehát ilyenkor nyilván több időbe telik.

2012. szept. 1. 09:37
Hasznos számodra ez a válasz?
 9/23 anonim ***** válasza:

A számtípusok mérete számít. Két byte-ot gyorsabban ad össze, mint két shortot. Két shortot gyorsabban ad össze, mint két longot.

A tárolható szám mérete az egyes típusokban:

byte < short < long

az int platformfüggő, vagy short, vagy long, és automatikusan konvertálódnak, ha kell.

2012. szept. 1. 20:30
Hasznos számodra ez a válasz?
 10/23 iostream ***** válasza:

"byte < short < long

az int platformfüggő, vagy short, vagy long"


Ez baromság.

[link]

2012. szept. 1. 21:08
Hasznos számodra ez a válasz?
1 2 3

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!