2013-03-04 9 views
6

Quindi, in base allo question I asked earlier, ho scaricato e configurato boost. Ho questo codice:C++ Boost Storage di grandi dimensioni

#include <stdlib.h> 
#include <boost\multiprecision\gmp.hpp> 
using namespace std; 
using namespace boost::multiprecision; 

void main() { 
    mpz_int N(567014094304930933548155069494723691156768423655208899778686163624192868328194365094673392756508907687565332345345678900976543567890976543565789054335678097654680986564323567890876532456890775646780976543556789054367890765435689876545898876587907876535976565578907654538790878656543687656543467898786565457897675645657689756456578656456768654657898865567689656890795587907654678798765787897865654657897654678965465786867278762795432151914451557727529104757415030674806148138138281214236089749601911974949125689884222023119844272122501649909415937); 

} 

Ma quando compilo si dice

IntelliSense: integer constant is too large 

Se mpz_int non è quello che dovrei usare, allora cosa dovrei usare per grandi int di spinta?

+1

Con gmpxx, si può solo scrivere '567014094304930933548155069494723691156768423655208899778686163624192868328194365094673392756508907687565332345345678900976543567890976543565789054335678097654680986564323567890876532456890775646780976543556789054367890765435689876545898876587907876535976565578907654538790878656543687656543467898786565457897675645657689756456578656456768654657898865567689656890795587907654678798765787897865654657897654678965465786867278762795432151914451557727529104757415030674806148138138281214236089749601911974949125689884222023119844272122501649909415937_mpz' –

risposta

2

Si sta cercando di costruire da un numero intero letterale: che è esattamente questo, un letterale di tipo "int" e solo in grado di contenere "int" valori dimensioni. È possibile:

1) Inserisci il tuo numero intero costante tra virgolette, in modo che il valore sia costruito da una stringa, oppure 2) Solo con cpp_int, usa il supporto letterale definito dall'utente per costruire da una precisione letterale estesa , vedi http://www.boost.org/doc/libs/1_55_0/libs/multiprecision/doc/html/boost_multiprecision/tut/lits.html Nota che questo richiede un compilatore C++ 11 - VC++ che stai usando non ha ancora le caratteristiche linguistiche necessarie per supportarlo. Si noti che questa è la vera inizializzazione di constexpr, non il costrutto nascosto da stringa al runtime utilizzato da gmpxx (necessariamente dato che è richiesta l'allocazione di memoria).