Kezdőoldal » Számítástechnika » Programozás » Lehet elágazás nélkül maradéko...

Lehet elágazás nélkül maradékot számolni?

Figyelt kérdés

Valójában az algoritmus érdekel, nincs egy külön program amit meg szeretnék írni.

Ha ismertek olyan procit(CPU), vagy azon tulajdonság(CPU feature set-ből) megnevezését, amivel a proci külön ehhez tud egy megoldást, na annak is örülnék.

Továbbá érdekel még intrinzik függvényes(intrinsic) programozás is főleg c# nyelven, de igazából utána tudok nézni, hogyha nem ezen a nyelven külditek el.


Mit értek elágazás nélküliségnek?

Azt hogy pusztán összeadással, vagy bizonyos bitmanipulációkkal, pl lehagyok egy bitet, vagy hozzáteszek egy bitet.

A további bit szintű összehasonlítások is jöhetnek, úgy mint éselés, vagyolás, stb...


Értelem szerűen egy ciklus sem jó a ciklusban maradási feltétel miatt.

Osztás azért nem jó, mert nullára való osztást kell ellenőriznem egy feltétellel, de még is a legközelebbi amihez jutottam a következő algoritmus:

szám - (osztó * (szám / osztó)) = maradék


Előre is köszönöm.



2022. júl. 3. 15:07
 1/6 anonim ***** válasza:
16%
% operátor
2022. júl. 3. 16:38
Hasznos számodra ez a válasz?
 2/6 anonim ***** válasza:
0%
Nem kell ellenőrizned a nullával való osztást. Ha megtörténne, kivétel keletkezik amit elkapsz és lekezeled. Az nem elágazás.
2022. júl. 3. 17:35
Hasznos számodra ez a válasz?
 3/6 anonim ***** válasza:
70%

Most alacsonyszinten vagyunk (CPU), vagy magas szinten (C#)?


Alacsony szinten szinte az összes processzor tud olyat, hogy azt egy műveletből mgenézi, hogy az adott regiszterben lévő érték 0-e vagy sem. Ha meg nem tudja akkor OR x,x művelet eredményének a 0-sága ellenőrizhető.


A legtöbb ma proci (néhány kívételtől eltekintve, de azok is főleg 8 bitesek, és/vagy mikrokontrollerben használják azokat) szinte mindegyike tud egész osztani. És egy halom processzor még a maradékot is meg tudja adni, vagy eleve van olyan művelete amivel a maradékot kapod meg.


A fenti amit leírtál ott akkor igaz csak ha a (szám/osztó) egészrészét szorzod vissza az osztóval.

2022. júl. 3. 17:35
Hasznos számodra ez a válasz?
 4/6 anonim ***** válasza:
100%

például amd64-en ez eggyetlen utasítás bármiféle elágazás nélkül:


idiv: RAX contains a 64-bit quotient; RDX contains a 64-bit remainder.

div: stores the quotient in RAX, the remainder in RDX.

2022. júl. 5. 09:08
Hasznos számodra ez a válasz?
 5/6 A kérdező kommentje:

Sziasztok!


Egyes, kettes, és hármas - nekem algoritmus kell. Például a négyes elküldte nekem a megfelelő utasításokat amelyekre kíváncsi voltam (div és idiv), így én fellapozhattam azoknak a leírását, és megnézhettem milyen algoritmus alapján működnek. Így idáig egyedül a négyes válaszolt egyáltalán a kérdésemre. - Köszönöm szépen!

Tehát megnéztem a négyes által küldött utasítások algoritmusait, és azt találtam, hogy ezekben is van például nullára való ellenőrzés, és több elágazás is.


Mégegyszer köszönöm négyes! - A válaszod példa mutató arra, hogy milyen válaszra számítok, és le is írtam hogy miért.

2022. júl. 11. 10:28
 6/6 A kérdező kommentje:

Találtam egy algoritmust például a kettő hatványaival való osztásra.

Az algoritmus:

Az A szám eleme egész számok halmazának, és b eleme a pozitív egész számok halmazának. Az m a maradék operandus.

A m 2^b = A & ((2^b)-1)

Mivel bit szintű ez a megoldás, ezért például A=-1 esetben is működik.

Minusz egyet a nulla alatti következő felvehető értékkel fejezzük ki, ami például 4 bit esetében 15 (1111).

Ez esetben az 1111-et össze éselve 0001-el 0001-et kapunk, ami helyes.

Más szóval páratlan számot kötelezően páros követ, ezért negatív számokkal is működik.


Azt találtam az interneten, hogy jelenleg nem létezik megfelelő módszer maradék számításra pár különleges eseten kívűl. Ugyanakkor azt is megtaláltam, hogy puszta bitmanipulációval a pár különleges esetű maradékolás lehetséges.

Forrás: [link]

2022. júl. 23. 21:28

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!