Matematické Fórum


1. 8. 2026 (L) Fórum bude brzy uzavřeno 😿

Nejste přihlášen(a). Přihlásit

#1 21. 01. 2012 17:03 — Editoval centaurian (21. 01. 2012 17:05)

centaurian
Zelenáč
Příspěvky: 1
Reputace:   
 

Dělení velkých čísel

Zdravím.
Řeším problém ohledně dělení:

1) konkrétně:

Potřebuji vydělit 2 čísla v assembleru.
dělenec: reprezentován 3bajty (24bitů), maximální hodnota 255*dělitel
dělitel:   reprezentován 2bajty (16bitů), maximální hodnota 320
podíl se tedy vždy vejde do 1 bajtu (8bitů) (maximální hodnota 255)
Mám operaci DIV (tj. operátor celočíselného dělení), který ovšem umí podělit jen 2bajtové číslo jednobajtovým a výsledek pak uloží do jednoho bajtu.

2) obecně:
mám například číslo 387, které chci vydělit číslem 43 (výsledek je jednociferný = 9). Mám ovšem k dispozici pouze kalkulačku, která umí dělit pouze dvouciferné číslo jednociferným tj. např. provést výpočet 25/5=5.
(dále umí násobit, sčítat a odečítat libovolná čísla).

Offline

 

#2 09. 08. 2012 20:38 — Editoval j3n6 (16. 09. 2012 02:53)

j3n6
Zelenáč
Místo: Praha 6 Břevnov
Příspěvky: 4
Reputace:   
Web
 

Re: Dělení velkých čísel

↑ centaurian:

                      -> neuveden typ assembleru;
Takhle pro Borland:

Maximální číslo v hex nebo dekadicky:
              local integer 32, tedy l_i32_:   
               __int32 l_i32__re =    0x7FFFFFFF;          // 2415919103
Nějaké prvočíslo:
               __int32 l_i32__im =  2417;

Výsledek do:
               __int32 l_i32_ret =      0;
Modulo výsledku do:
               __int32 l_i32_edx =     0;


_asm  {
      push ecx
      mov  edx, 0
      mov  eax, l_i32__re                 // dělenec                                                   do registru eax
      mov  ecx, l_i32__im                 // dělitel                                                     do registru ecx
      div  ecx                                   // vydělíš

      mov l_i32_ret,  eax                  // celé číslo do l_i32_ret ( return )                 z registru eax
      mov l_i32_edx,  edx                 //  celočíselný zbytek po dělení   ( modulo )   z registru edx
      pop ecx
   };
 
     a třeba vypsat do Editu.
                Edit->Text =  l_i32_edx;

//----------------------------------------- 13.9.2012 -------------------------------------------------------------
Vyvinul jsem matetatický engine ( program) na dělení libovolně velkých čísel,  E ( exa) tedy e^18, deset na osmnástou v jednom kroku. Je prvotně určen na penetraci RSA metodou reverzní faktorizace prvočísla pomocí #include valarray z  C++ STL.
"Prague Pie - Pražský koláč." na http://large-numbers-division.org/

Offline

 

Zápatí

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson