Changeset 62 for include/fflas-ffpack/modular-balanced.h
- Timestamp:
- 06/03/08 21:24:57 (7 months ago)
- Files:
-
- 1 modified
-
include/fflas-ffpack/modular-balanced.h (modified) (6 diffs)
Legend:
- Unmodified
- Added
- Removed
-
include/fflas-ffpack/modular-balanced.h
r26 r62 12 12 */ 13 13 14 #ifndef __MODULAR_BALANCED_H 15 #define __MODULAR_BALANCED_H 16 14 17 #include <math.h> 15 16 17 #ifndef __MODULAR_DOUBLE_BALANCED_H 18 #define __MODULAR_DOUBLE_BALANCED_H 19 20 template <class T> 21 class Modular; 18 #include "fflas-ffpack/modular-randiter.h" 22 19 23 20 template <class Element> 24 class ModularRandIter 25 { 26 public: 27 ModularRandIter (const Modular<Element> &F):_F(F){} 28 ModularRandIter (const ModularRandIter<Element> &R) 29 : _F (R._F) {} 30 Element &random (Element &a) const 31 { return _F.init(a,(double)rand()); } 32 private: 33 Modular<Element> _F; 34 35 }; 21 class ModularBalanced; 36 22 37 23 template<> 38 class Modular <double>{24 class ModularBalanced <double>{ 39 25 40 26 protected: … … 47 33 typedef double Element; 48 34 typedef unsigned long FieldInt; 49 typedef Modular RandIter<double> RandIter;35 typedef ModularBalancedRandIter<double> RandIter; 50 36 51 37 const bool balanced; 52 38 53 Modular <double> (int p) : modulus((double)p), inv_modulus(1./(double)p), half_mod( (p-1.)/2), balanced(true) {}54 55 Modular <double>(const Modular<double>& mf) : modulus(mf.modulus), inv_modulus(mf.inv_modulus), half_mod(mf.half_mod), balanced(true){}56 57 const Modular <double> &operator=(const Modular<double> &F) {39 ModularBalanced<double> (int p) : modulus((double)p), inv_modulus(1./(double)p), half_mod( (p-1.)/2), balanced(true) {} 40 41 ModularBalanced<double>(const ModularBalanced<double>& mf) : modulus(mf.modulus), inv_modulus(mf.inv_modulus), half_mod(mf.half_mod), balanced(true){} 42 43 const ModularBalanced<double> &operator=(const ModularBalanced<double> &F) { 58 44 modulus = F.modulus; 59 45 inv_modulus = F.inv_modulus; … … 242 228 return init( r, tmp ); 243 229 } 230 231 static inline double getMaxModulus() 232 { return 67108864.0; } // 2^26 244 233 245 234 }; 246 235 template<> 247 class Modular <float>{236 class ModularBalanced <float>{ 248 237 249 238 protected: … … 256 245 typedef float Element; 257 246 typedef unsigned long FieldInt; 258 typedef Modular RandIter<float> RandIter;247 typedef ModularBalancedRandIter<float> RandIter; 259 248 260 249 const bool balanced; 261 250 262 Modular <float> (int p) : modulus((float)p), inv_modulus(1./(float)p), half_mod( (p-1.)/2), balanced(true) {}263 264 Modular <float>(const Modular<float>& mf) : modulus(mf.modulus), inv_modulus(mf.inv_modulus), half_mod(mf.half_mod), balanced(true){}265 266 const Modular <float> &operator=(const Modular<float> &F) {251 ModularBalanced<float> (int p) : modulus((float)p), inv_modulus(1./(float)p), half_mod( (p-1.)/2), balanced(true) {} 252 253 ModularBalanced<float>(const ModularBalanced<float>& mf) : modulus(mf.modulus), inv_modulus(mf.inv_modulus), half_mod(mf.half_mod), balanced(true){} 254 255 const ModularBalanced<float> &operator=(const ModularBalanced<float> &F) { 267 256 modulus = F.modulus; 268 257 inv_modulus = F.inv_modulus; … … 271 260 } 272 261 273 274 275 276 277 262 FieldInt &cardinality (FieldInt &c) const{ 278 263 return c = (FieldInt) modulus; … … 462 447 return init( r, tmp ); 463 448 } 449 static inline float getMaxModulus() 450 { return 2048; } // 2^11 464 451 465 452 };
