Main Page   Compound List   File List   Compound Members   File Members  

biginteger.h

00001 
00002 #include <gmp.h>
00003 #include <R.h>
00004 #include <Rdefines.h>
00005 
00006 #include <string>
00007 
00018 class biginteger
00019 {
00023     mpz_t value;
00024 
00028     bool na;
00029     
00030 public:
00034     biginteger() {mpz_init(value); setValue();}
00035 
00039     biginteger(void* raw);
00040 
00045     biginteger(const mpz_t& value_) : na(false) {mpz_init_set(value, value_);}
00046     
00050     biginteger(int value_) : na(false) {mpz_init_set_ui(value, value_);}
00051     
00055     biginteger(double value_) : na(false) {mpz_init_set_d(value, value_);}
00056 
00060     biginteger(const std::string& value_) : na(false) {mpz_init_set_str(value, value_.c_str(), 0);}
00061     
00065     biginteger(const biginteger& rhs) : na(rhs.na) {mpz_init_set(value, rhs.value);}
00066 
00070     biginteger& operator=(const biginteger& rhs) {mpz_set(value, rhs.value); na = rhs.na;}
00071 
00075     ~biginteger() {mpz_clear(value);}
00076 
00077 
00081     void setValue() {mpz_set_ui(value, 0); na = true;}
00082 
00086     void setValue(mpz_t value_) {mpz_set(value, value_); na = false;}
00087 
00093     const mpz_t& getValueTemp() const {return value;}
00094 
00098     bool isNA() const {return na;}
00099     
00103     std::string str() const;
00104 
00109     long as_long() const {return mpz_get_ui(value);}
00110 
00114     double as_double() const {return mpz_get_d(value);}
00115 
00126     int as_raw(void* raw) const;
00127 
00132     size_t raw_size() const;
00133 
00137     void swap(biginteger& other);
00138 
00139 
00143     int isprime(int reps){return  mpz_probab_prime_p(value,reps);}
00144 
00145 };
00146 
00147 
00153 class bigmod {
00154 public:
00155     biginteger value;
00156     biginteger modulus;
00157     
00161     bigmod(const biginteger& value_ = biginteger(), 
00162             const biginteger& modulus_ = biginteger()) : value(value_),modulus(modulus_) {}
00163     
00167     std::string str() const;
00168 };
00169 
00170 
00171 
00172 
00181 bigmod operator+(const bigmod& rhs, const bigmod& lhs);
00182 
00188 bigmod operator-(const bigmod& rhs, const bigmod& lhs);
00189 
00195 bigmod operator*(const bigmod& rhs, const bigmod& lhs);
00196 
00202 bigmod operator/(const bigmod& rhs, const bigmod& lhs);
00203 
00212 bigmod operator%(const bigmod& rhs, const bigmod& lhs);
00213 
00224 bigmod pow(const bigmod& base, const bigmod& exp);
00225 
00231 bigmod inv(const bigmod& x, const bigmod& m);
00232 
00239 bigmod set_modulus(const bigmod& x, const bigmod& m);
00240 
00246 bigmod gcd(const bigmod& rhs, const bigmod& lhs);
00247 
00253 bigmod lcm(const bigmod& rhs, const bigmod& lhs);
00254 
00255 

Generated on Sat Nov 27 18:46:53 2004 for GMP-RCdocumentation by doxygen1.2.18