11 #ifndef realroot_scalar_hpp
12 #define realroot_scalar_hpp
20 namespace let {
template<
class A,
class B>
inline void assign(A& a,
const B&
b); }
30 T &
rep() {
return (*data);}
31 const T &
rep()
const {
return (*data);}
34 inline T &
rep() {
return (data);}
35 inline const T &
rep()
const {
return (data);}
39 template<
class R>
inline
49 scalar (
const char*
string,
unsigned int b=10);
61 bool operator < (const scalar<T>& rhs)
const;
62 bool operator <= (const scalar<T>& rhs)
const;
143 void Div2Exp (
unsigned long exponent_of_2);
145 void Mod2Exp (
unsigned long exponent_of_2);
146 void Mul2Exp (
unsigned long exponent_of_2);
155 void quo (
unsigned long divisor);
157 unsigned long rem (
unsigned long divisor);
213 template<
class T> scalar<T>&
operator + (
const scalar<T>&
b,
unsigned long ul);
214 template<
class T> scalar<T>&
operator - (
const scalar<T>&
b,
unsigned long ul);
215 template<
class T> scalar<T>&
operator * (
const scalar<T>&
b,
unsigned long ul);
216 template<
class T> scalar<T>&
operator / (
const scalar<T>&
b,
unsigned long ul);
217 template<
class T> scalar<T>&
operator % (
const scalar<T>&
b,
unsigned long ul);
219 template<
class T> scalar<T>&
operator + (
unsigned long ul,
const scalar<T>&
b);
220 template<
class T> scalar<T>&
operator * (
unsigned long ul,
const scalar<T>&
b);
222 template<
class T> scalar<T>&
operator + (
const scalar<T>&
b,
long sl);
223 template<
class T> scalar<T>&
operator - (
const scalar<T>&
b,
long sl);
224 template<
class T> scalar<T>&
operator * (
const scalar<T>&
b,
long sl);
225 template<
class T> scalar<T>&
operator / (
const scalar<T>&
b,
long sl);
226 template<
class T> scalar<T>&
operator % (
const scalar<T>&
b,
long sl);
228 template<
class T> scalar<T>&
operator + (
long sl,
const scalar<T>&
b);
229 template<
class T> scalar<T>&
operator * (
int sl,
const scalar<T>&
b);
230 template<
class T> scalar<T>&
operator * (
long sl,
const scalar<T>&
b);
231 template<
class T> scalar<T>&
operator * (
double d,
const scalar<T>&
b);
233 template<
class T> scalar<T>&
Div2Exp (
const scalar<T>&
b,
234 unsigned long exponent_of_2);
235 template<
class T> scalar<T>&
GCD (
const scalar<T>& b1,
const scalar<T>& b2);
236 template<
class T> scalar<T>&
gcd (
const scalar<T>& b1,
const scalar<T>& b2);
237 template<
class T> scalar<T>&
Mod2Exp (
const scalar<T>&
b,
238 unsigned long exponent_of_2);
239 template<
class T> scalar<T>&
Mul2Exp (
const scalar<T>&
b,
unsigned long exponent_of_2);
240 template<
class T> scalar<T>&
PowMod (
const scalar<T>&
b,
const scalar<T>& exp,
const scalar<T>& m);
241 template<
class T> scalar<T>&
PowMod (
const scalar<T>&
b,
unsigned long exp,
243 template<
class T> scalar<T>
abs (
const scalar<T>&
b);
244 template<
class T> scalar<T>&
neg (
const scalar<T>&
b);
245 template<
class T> scalar<T>
pow (
const scalar<T>& base,
unsigned long exp);
246 template<
class T> scalar<T>&
quo (
const scalar<T>& dividend,
unsigned long divisor);
247 template<
class T> scalar<T>&
rem (
const scalar<T>& dividend,
const scalar<T>& divisor);
248 template<
class T>
unsigned long rem (
const scalar<T>&
b,
unsigned long divisor);
249 template<
class T> scalar<T>
sqrt (
const scalar<T>&
b);
259 #if defined(__GNUG__) && !defined(NO_NRV)
260 #define NRVAL(name) return name
261 #define NRCODE(code) code
262 #define NONRCODE(code)
266 #define NONRCODE(code) code
269 #define OPCODE(a, b, op) scalar<T>& r =*new scalar<T>(a); return (r op b);
303 template<
class T>
inline
309 template<
class T>
inline
315 template<
class T>
inline scalar<T>&
321 template<
class T>
inline scalar<T>&
327 template<
class T>
inline
334 template<
class T>
inline
340 template<
class T>
inline
346 template<
class T>
inline
349 template<
class T>
inline
352 template<
class T>
inline
355 template<
class T>
inline
358 template<
class T>
inline
361 template<
class T>
inline
364 template<
class T>
inline
367 template<
class T>
inline
370 template<
class T>
inline
373 template<
class T>
inline
376 template<
class T>
inline
379 template<
class T>
inline
382 template<
class T>
inline
385 template<
class T>
inline
388 template<
class T>
inline
395 template<
class T>
inline
401 template<
class T>
inline
408 template<
class T>
inline
411 NRCODE(r.Div2Exp(exponent_of_2);)
415 template<class T>
inline
422 template<class T>
inline
429 template<class T>
inline
432 NRCODE(r.Mod2Exp(exponent_of_2);)
436 template<class T>
inline
439 NRCODE(r.Mul2Exp(exponent_of_2);)
443 template<class T>
inline
450 template<class T>
inline
458 template <class T>
inline
472 template<class T>
inline
479 template<class T>
inline
486 template<class T>
inline
493 template<class T>
inline
500 template<class T>
inline
507 template<class T>
inline
511 return r.
rem(divisor);
514 template<
class T>
inline
521 template<class T>
inline
535 inline double rfloor(
double x) {
return floor(x); }
536 inline double rceil(
double x) {
return ceil(x); }
537 inline long int bit_size(
double x) {
return sizeof(double) * 8; }
TMPL void rem(POLYNOMIAL &r, const POLYNOMIAL &a, const POLYNOMIAL &b)
Definition: polynomial_operators.hpp:73
bool operator>(const scalar< T > &rhs) const
scalar< T > & operator+=(const scalar< T > &rhs)
scalar()
Definition: scalar.hpp:37
T pow(const T &a, int i)
Definition: binomials.hpp:12
void neg(Interval< C, r > &a)
Definition: Interval_fcts.hpp:200
const C & b
Definition: Interval_glue.hpp:25
scalar< T > & operator=(const scalar< T > &rhs)
bool operator>=(const scalar< T > &rhs) const
QQ Size(const QQ &r)
Definition: GMPXX.hpp:64
scalar(double d)
Definition: scalar.hpp:41
void rem(const scalar< T > &divisor)
double gcd(const double &, const double &)
Definition: GMP.hpp:90
#define OPCODE(a, b, op)
Definition: scalar.hpp:269
T & rep()
Definition: scalar.hpp:30
scalar< T > & quo(const scalar< T > ÷nd, unsigned long divisor)
Definition: scalar.hpp:487
#define NRCODE(code)
Definition: scalar.hpp:265
scalar< T > & operator%=(const scalar< T > &rhs)
void PowMod(const scalar< T > &exp, const scalar< T > &m)
extended< NT > operator-(const extended< NT > &lhs, const extended< NT > &rhs)
Definition: extended.hpp:132
extended< NT > operator/(const extended< NT > &lhs, const extended< NT > &rhs)
Definition: extended.hpp:111
scalar< T > & pow(unsigned long exp)
scalar< T > & operator-=(const scalar< T > &rhs)
shared_object< T > data
Definition: scalar.hpp:29
scalar(const scalar< R > &x)
Definition: scalar.hpp:40
#define NRVAL(name)
Definition: scalar.hpp:264
extended< NT > operator+(const extended< NT > &lhs, const extended< NT > &rhs)
Definition: extended.hpp:122
void Mul2Exp(unsigned long exponent_of_2)
bool operator<(const scalar< T > &rhs) const
void quo(const scalar< T > &divisor)
void Mod2Exp(unsigned long exponent_of_2)
bool operator<=(const scalar< T > &rhs) const
bool operator!=(const scalar< T > &rhs) const
scalar< T > & operator*=(const scalar< T > &rhs)
long int bit_size(const ZZ &z)
Definition: GMPXX.hpp:32
scalar< T > & BigIntPow(unsigned long base, unsigned long exp) NRVAL(r)
Definition: scalar.hpp:522
scalar< T > & Div2Exp(const scalar< T > &b, unsigned long exponent_of_2)
Definition: scalar.hpp:409
#define NONRCODE(code)
Definition: scalar.hpp:266
double rceil(double x)
Definition: scalar.hpp:536
scalar< T > & operator/=(const scalar< T > &rhs)
scalar< T > & Mod2Exp(const scalar< T > &b, unsigned long exponent_of_2)
Definition: scalar.hpp:430
void abs(Interval< C, r > &x, const Interval< C, r > &a)
Definition: Interval_fcts.hpp:185
scalar< T > & GCD(const scalar< T > &b1, const scalar< T > &b2)
Definition: scalar.hpp:416
scalar< T > sqrt(const scalar< T > &b)
Definition: scalar.hpp:501
bool operator==(const scalar< T > &rhs) const
scalar< T > & operator%(const scalar< T > &b, unsigned long ul)
Definition: scalar.hpp:328
const T & rep() const
Definition: scalar.hpp:31
void factorial(unsigned long n)
void GCD(const scalar< T > &b2)
const C & c
Definition: Interval_glue.hpp:45
scalar< T > & BigIntFactorial(unsigned long n)
Definition: scalar.hpp:515
scalar< T > & PowMod(const scalar< T > &b, const scalar< T > &exp, const scalar< T > &m)
Definition: scalar.hpp:444
scalar(unsigned x)
Definition: scalar.hpp:48
void assign(A &a, const B &b)
Generic definition of the assignement function.
Definition: assign.hpp:97
double rfloor(double x)
Definition: scalar.hpp:535
extended< NT > operator*(const extended< NT > &lhs, const extended< NT > &rhs)
Definition: extended.hpp:101
scalar< T > & Mul2Exp(const scalar< T > &b, unsigned long exponent_of_2)
Definition: scalar.hpp:437
Definition: scalar.hpp:24
void Div2Exp(unsigned long exponent_of_2)
~scalar()
Definition: scalar.hpp:55