Forum » Programiranje » [c++] Izpis večjega števila, if ali abs?
[c++] Izpis večjega števila, if ali abs?
djtey ::
Pozdrav!
Vpišemo naprimer dve števili, zdaj pa nevem, kako bi naredil, da ti izpiše večjo število??
LP
Vpišemo naprimer dve števili, zdaj pa nevem, kako bi naredil, da ti izpiše večjo število??
LP
- spremenil: Vesoljc ()
Vesoljc ::
bi prosil, da si malo bolj natancen...
dej primer!
dej primer!
Abnormal behavior of abnormal brain makes me normal...
djtey ::
Napišiti program, ki zahteva od uporabnika vnos dveh števil. Program nato izpiše večje število.
Kami ::
Ja simple, npr da je spremenljivka za prvo število st1 za drugo pa st2 potem pa daš
.... if (st1 > st2) cout << "Stevilo 1 - " << st1 << " je vecje od stevila 2"; else cout << "Stevilo 2 - " << st2 << " je vecje od stevila 1"; .....
Zgodovina sprememb…
- spremenil: Kami ()
Kami ::
No drugače je tu cela koda:
#include <iostream.h> int main() { int st1, st2; cout << "Vnesi stevilo 1:\n"; cin >> st1; cout << "Vnesi stevilo 2:\n"; cin >> st2; if (st1 > st2) cout << "Stevilo 1 - " << st1 << " je vecje od stevila 2"; else cout << "Stevilo 2 - " << st2 << " je vecje od stevila 1"; }
Vesoljc ::
if (st1 > st2) cout << "Stevilo 1 - " << st1 << " je vecje od stevila 2";
ahhhh....
if (st1 > st2) cout << "Stevilo 1 - " << st1 << " je vecje od stevila 2";
Abnormal behavior of abnormal brain makes me normal...
snow ::
Sam pa ni branchinga :)
Random mutation plus nonrandom cumulative natural selection - Richard Dawkins
MaCoFaCo ::
Ko smo že pri tem. A funkcijo abs(x) se da implementirat enostavno tako da "izniči" bit za predznak. Torej dejansko brez branchinga?
V praksi pa je to najverjetneje narejeno ravno z branchingom ane?
Kak offtopic:)
V praksi pa je to najverjetneje narejeno ravno z branchingom ane?
Kak offtopic:)
Thomas ::
Hehe .. jebo C++, če ne zna zadeve prevesti brez branchinga!
Man muss immer generalisieren - Carl Jacobi
Quikee ::
eh ni treba vec.. sem ze najso. =)
int v; // we want to find the absolute value of v
int r; // the result goes here
r = (v ^ (v >> (sizeof(int) * CHAR_BIT - 1))) -
(v >> (sizeof(int) * CHAR_BIT - 1));
int v; // we want to find the absolute value of v
int r; // the result goes here
r = (v ^ (v >> (sizeof(int) * CHAR_BIT - 1))) -
(v >> (sizeof(int) * CHAR_BIT - 1));
Thomas ::
Ni dobr. Tukaj se pri prevajanju komot skriva kakšen skokec. Ni dobr.
Tole je bolš:
CMOVGTZ R1, R2, R3 // if (R1 > 0) R2 = R3
CMOVLTZ R1, R2, R3 // if (R1 < 0) R2 = R3
CMOVEQZ R1, R2, R3 // if (R1 ==0) R2 = R3
Samo ni čist dober še?
Tole je bolš:
CMOVGTZ R1, R2, R3 // if (R1 > 0) R2 = R3
CMOVLTZ R1, R2, R3 // if (R1 < 0) R2 = R3
CMOVEQZ R1, R2, R3 // if (R1 ==0) R2 = R3
Samo ni čist dober še?
Man muss immer generalisieren - Carl Jacobi
Quikee ::
dvomim, ker je pisano za cpu-je, kjer je branching drag. CHAR_BIT je tak konstanta in sizeof(int) recimo, da tudi.. tak da mas:
r = (v ^ (v >> 31)) - (v >> 31); kar pa pomeni samo shift, xor in minus.
r = (v ^ (v >> 31)) - (v >> 31); kar pa pomeni samo shift, xor in minus.
MaCoFaCo ::
ABS(R1) { MOV R3, R1 //R3 = R1 CMOVGTZ R1, R2, R3 // if (R1 > 0) R2 = R3 MOV R3, 0 SUB R3, R1 //R3 = -R1 CMOVLTZ R1, R2, -R3 // if (R1 < 0) R2 = R3 CMOVEQZ R1, R2, R3 // if (R1 ==0) R2 = R3 RETURN R2 }
snow ::
and eax,0x7fffffff
Random mutation plus nonrandom cumulative natural selection - Richard Dawkins
Quikee ::
snow: ne.. ti dobis v primeru 1 (0000 00001) na izhod (0000 0001), v primeru -1 (1111 1111) pa dobis 127 (0111 1111)... kar pa ni 1 (0000 0001). =) (v primeru 8 bitnih registrov).
Zgodovina sprememb…
- spremenil: Quikee ()
snow ::
abs:
MOV EDX,EAX
SAR EDX,31
XOR EAX,EDX
SUB EAX,EDX
MOV EDX,EAX
SAR EDX,31
XOR EAX,EDX
SUB EAX,EDX
Random mutation plus nonrandom cumulative natural selection - Richard Dawkins
Thomas ::
V glavnem ... vse skoke se da porazirat. Sploh vse. Edino je vprašanje, če je smiselno. Včasih je branching najcenejši. Ne za abs.
Man muss immer generalisieren - Carl Jacobi
snow ::
//8x 16-bit short a[8]; short b[8]; short max[8]; movdqa xmm1,xmmword ptr [a] pmaxsw xmm1,xmmword ptr [b] movdqa xmmxword ptr [max],xmm1
analogno za 16x8bit(char), sam da so prej arrayi po 16 charov, pa instrukcija je pmaxsb.
Random mutation plus nonrandom cumulative natural selection - Richard Dawkins
Zgodovina sprememb…
- spremenilo: snow ()
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | Zakaj mi program ne dela?Oddelek: Programiranje | 1156 (705) | M.B. |
» | Python - naloga z računanjemOddelek: Programiranje | 2094 (1571) | ktka |
⊘ | [C#]naloga iz metod!Oddelek: Programiranje | 1674 (1507) | Ziga Dolhar |
⊘ | [C#] naloga iz metodOddelek: Programiranje | 1642 (1402) | Mavrik |
» | [C#] število manjše proti večjemuOddelek: Programiranje | 775 (671) | detroit |