duże liczby - pov: OVERFLOW error

dział ogólny

duże liczby - pov: OVERFLOW error

Nowy postprzez marcinp1984 » wtorek, 1 czerwca 2010, 18:45

Witam :)
Mam problem z czymś takim jak pov: OVERFLOW error. Domyślam się że dotyczy on tego, że podnosząc do potęgi otrzymuje zbyt dużą liczbę i wychodzę poza jakiś zakres. Problem ten pojawia się np. już przy czymś takim:
Kod: Zaznacz cały
Form1->Memo3->Lines->Add(pow(97,200));

Co mnie dziwi bo nawet windowsowy kalkulatorek nie ma z tym żadnego problemu:/

A ja potrzebuję (przy szyfrowaniu RSA) podnosić liczby nawet do potęgi 300000. Jest to w ogóle możliwe?? Jak sobie można z tym poradzić??
Avatar użytkownika
marcinp1984
Bladawiec
Bladawiec
 
Posty: 9
Dołączył(a): niedziela, 21 marca 2010, 20:47
Podziękował : 5
Otrzymał podziękowań: 0
System operacyjny: Windows XP Pro SP2
Kompilator: C++ Builder
Gadu Gadu: 0
    Windows XPFirefox

Re: duże liczby - pov: OVERFLOW error

Nowy postprzez polymorphism » wtorek, 1 czerwca 2010, 19:47

Poszukaj informacji o szybkim potęgowaniu modularnym.
C++ Reference - opis wszystkich klas STL-a i funkcji C.

Za ten post autor polymorphism otrzymał podziękowanie od:
marcinp1984
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2157
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 19
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: duże liczby - pov: OVERFLOW error

Nowy postprzez marcinp1984 » wtorek, 1 czerwca 2010, 20:22

a może ma ktoś kod źródłowy w c++ do takiego potęgowania liczb? Bo niestety poza takim potęgowaniem macierzy nic nie mogę znaleźć :(
Avatar użytkownika
marcinp1984
Bladawiec
Bladawiec
 
Posty: 9
Dołączył(a): niedziela, 21 marca 2010, 20:47
Podziękował : 5
Otrzymał podziękowań: 0
System operacyjny: Windows XP Pro SP2
Kompilator: C++ Builder
Gadu Gadu: 0
    Windows XPFirefox

Re: duże liczby - pov: OVERFLOW error

Nowy postprzez polymorphism » wtorek, 1 czerwca 2010, 20:50

O ja pier..le! W pierwszym linku z googla masz opisany algorytm, włącznie ze schematem blokowym, pseudo kodem i, uwaga!, kodami źródłowymi dla 5 języków (w tym dla C++)!
C++ Reference - opis wszystkich klas STL-a i funkcji C.

Za ten post autor polymorphism otrzymał podziękowanie od:
marcinp1984
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2157
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 19
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: duże liczby - pov: OVERFLOW error

Nowy postprzez Cyfrowy Baron » środa, 2 czerwca 2010, 07:08

W związku z tym, że strona o której pisze polymorphism może w końcu zniknąć, a to forum może przetrwać dłużej, więc pozwolę sobie zacytować udostępniany kod:

Kod autorstwa Tomasza Lubińskiego z serwisu: http://www.algorytm.org:

Kod: Zaznacz cały
//
// Szybkie Potegowanie modulo
//
// www.algorytm.org
// (c)2006 Tomasz Lubinski
//

#include "stdio.h"
#include "stdlib.h"

// calculates a^b mod m
int power_modulo_fast(int a, int b, int m)
{
   int i;
   int result = 1;
   long int x = a%m;

   for (i=1; i<=b; i<<=1)
   {
      x %= m;
      if ((b&i) != 0)
      {
         result *= x;
         result %= m;
      }
      x *= x;
   }

   return result;
}



int main(void)
{
   //9688563^45896 mod 71 = 30
   printf("9688563^458926 mod 71 = %d\n", power_modulo_fast(9688563, 458926, 71));

   //12^53 mod 7 = 3
   printf("12^53 mod 7 = %d\n", power_modulo_fast(12, 53, 7));

   return 0;
}
 


Więcej o tym algorytmie pod adresem: http://www.algorytm.org/index.php?option=com_content&task=view&id=177&Itemid=28

Za ten post autor Cyfrowy Baron otrzymał podziękowanie od:
marcinp1984
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4719
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: duże liczby - pov: OVERFLOW error

Nowy postprzez marcinp1984 » środa, 2 czerwca 2010, 13:34

upss... sorry ;] Powiem szczerze ze odwiedziłem tą stronę, nawet pobrałem ten plik i go otworzyłem... ale wczoraj wyglądał on zupełnie inaczej, dłużej, i bardziej skomplikowanie :D Kurcze chyba coś mi się pomyliło i otworzyłem nie to co trzeba :] Tak czy siak o 1 w nocy udało mi się znaleźć ten kod w jakimś pdf-ie i działa to idealnie. Dzięki za podpowiedź, że istnieje coś takiego jak szybkie potęgowanie modularne :)
Avatar użytkownika
marcinp1984
Bladawiec
Bladawiec
 
Posty: 9
Dołączył(a): niedziela, 21 marca 2010, 20:47
Podziękował : 5
Otrzymał podziękowań: 0
System operacyjny: Windows XP Pro SP2
Kompilator: C++ Builder
Gadu Gadu: 0
    Windows XPFirefox


  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Ogólne problemy z programowaniem

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 12 gości

cron