23 #ifndef PLLL_INCLUDE_GUARD__ARITHMETIC_GMP_REAL_OPS_HPP
24 #define PLLL_INCLUDE_GUARD__ARITHMETIC_GMP_REAL_OPS_HPP
42 const AddOp<RealContext, std::pair<D, expressions::Expression<RealContext, expressions::ConversionWrapper<unsigned long>, expressions::ConvertOp_Context> > > &,
43 const std::pair<D, expressions::Expression<RealContext, expressions::ConversionWrapper<unsigned long>, expressions::ConvertOp_Context> > & data)
45 add_ui(x, data.first.evaluate(), data.second.data().evaluate());
50 const AddOp<RealContext, std::pair<D, expressions::Expression<RealContext, expressions::ConversionWrapper<signed long>, expressions::ConvertOp_Context> > > &,
51 const std::pair<D, expressions::Expression<RealContext, expressions::ConversionWrapper<signed long>, expressions::ConvertOp_Context> > & data)
53 add_si(x, data.first.evaluate(), data.second.data().evaluate());
58 const AddOp<RealContext, std::pair<D, expressions::Expression<RealContext, expressions::ConversionWrapper<double>, expressions::ConvertOp_Context> > > &,
59 const std::pair<D, expressions::Expression<RealContext, expressions::ConversionWrapper<double>, expressions::ConvertOp_Context> > & data)
61 add_d(x, data.first.evaluate(), data.second.data().evaluate());
64 template<
class D1,
class D2,
template<
typename,
typename>
class O2,
class E>
66 const AddOp<RealContext, std::pair<D1, Expression<RealContext, Expression<IntegerContext, D2, O2>, ConvertOp_Context> > > &,
67 const std::pair<D1, Expression<RealContext, Expression<IntegerContext, D2, O2>, ConvertOp_Context> > & data)
69 add_z(x, data.first.evaluate(), data.second.data().evaluate());
74 const AddOp<RealContext, std::pair<expressions::Expression<RealContext, expressions::ConversionWrapper<unsigned long>, expressions::ConvertOp_Context>, D> > &,
75 const std::pair<expressions::Expression<RealContext, expressions::ConversionWrapper<unsigned long>, expressions::ConvertOp_Context>, D> & data)
77 add_ui(x, data.second.evaluate(), data.first.data().evaluate());
82 const AddOp<RealContext, std::pair<expressions::Expression<RealContext, expressions::ConversionWrapper<signed long>, expressions::ConvertOp_Context>, D> > &,
83 const std::pair<expressions::Expression<RealContext, expressions::ConversionWrapper<signed long>, expressions::ConvertOp_Context>, D> & data)
85 add_si(x, data.second.evaluate(), data.first.data().evaluate());
90 const AddOp<RealContext, std::pair<expressions::Expression<RealContext, expressions::ConversionWrapper<double>, expressions::ConvertOp_Context>, D> > &,
91 const std::pair<expressions::Expression<RealContext, expressions::ConversionWrapper<double>, expressions::ConvertOp_Context>, D> & data)
93 add_d(x, data.second.evaluate(), data.first.data().evaluate());
96 template<
class D1,
class D2,
template<
typename,
typename>
class O2,
class E>
98 const AddOp<RealContext, std::pair<Expression<RealContext, Expression<IntegerContext, D2, O2>, ConvertOp_Context>, D1> > &,
99 const std::pair<Expression<RealContext, Expression<IntegerContext, D2, O2>, ConvertOp_Context>, D1> & data)
101 add_z(x, data.second.evaluate(), data.first.data().evaluate());
107 const SubOp<RealContext, std::pair<D, expressions::Expression<RealContext, expressions::ConversionWrapper<unsigned long>, expressions::ConvertOp_Context> > > &,
108 const std::pair<D, expressions::Expression<RealContext, expressions::ConversionWrapper<unsigned long>, expressions::ConvertOp_Context> > & data)
110 sub_ui(x, data.first.evaluate(), data.second.data().evaluate());
115 const SubOp<RealContext, std::pair<D, expressions::Expression<RealContext, expressions::ConversionWrapper<signed long>, expressions::ConvertOp_Context> > > &,
116 const std::pair<D, expressions::Expression<RealContext, expressions::ConversionWrapper<signed long>, expressions::ConvertOp_Context> > & data)
118 sub_si(x, data.first.evaluate(), data.second.data().evaluate());
123 const SubOp<RealContext, std::pair<D, expressions::Expression<RealContext, expressions::ConversionWrapper<double>, expressions::ConvertOp_Context> > > &,
124 const std::pair<D, expressions::Expression<RealContext, expressions::ConversionWrapper<double>, expressions::ConvertOp_Context> > & data)
126 sub_d(x, data.first.evaluate(), data.second.data().evaluate());
129 template<
class D1,
class D2,
template<
typename,
typename>
class O2,
class E>
131 const SubOp<RealContext, std::pair<D1, Expression<RealContext, Expression<IntegerContext, D2, O2>, ConvertOp_Context> > > &,
132 const std::pair<D1, Expression<RealContext, Expression<IntegerContext, D2, O2>, ConvertOp_Context> > & data)
134 sub_z(x, data.first.evaluate(), data.second.data().evaluate());
139 const SubOp<RealContext, std::pair<expressions::Expression<RealContext, expressions::ConversionWrapper<unsigned long>, expressions::ConvertOp_Context>, D> > &,
140 const std::pair<expressions::Expression<RealContext, expressions::ConversionWrapper<unsigned long>, expressions::ConvertOp_Context>, D> & data)
142 ui_sub(x, data.first.data().evaluate(), data.second.evaluate());
147 const SubOp<RealContext, std::pair<expressions::Expression<RealContext, expressions::ConversionWrapper<signed long>, expressions::ConvertOp_Context>, D> > &,
148 const std::pair<expressions::Expression<RealContext, expressions::ConversionWrapper<signed long>, expressions::ConvertOp_Context>, D> & data)
150 si_sub(x, data.first.data().evaluate(), data.second.evaluate());
155 const SubOp<RealContext, std::pair<expressions::Expression<RealContext, expressions::ConversionWrapper<double>, expressions::ConvertOp_Context>, D> > &,
156 const std::pair<expressions::Expression<RealContext, expressions::ConversionWrapper<double>, expressions::ConvertOp_Context>, D> & data)
158 d_sub(x, data.first.data().evaluate(), data.second.evaluate());
161 template<
class D1,
class D2,
template<
typename,
typename>
class O2,
class E>
163 const SubOp<RealContext, std::pair<Expression<RealContext, Expression<IntegerContext, D2, O2>, ConvertOp_Context>, D1> > &,
164 const std::pair<Expression<RealContext, Expression<IntegerContext, D2, O2>, ConvertOp_Context>, D1> & data)
166 z_sub(x, data.first.data().evaluate(), data.second.evaluate());
172 const MulOp<RealContext, std::pair<D, expressions::Expression<RealContext, expressions::ConversionWrapper<unsigned long>, expressions::ConvertOp_Context> > > &,
173 const std::pair<D, expressions::Expression<RealContext, expressions::ConversionWrapper<unsigned long>, expressions::ConvertOp_Context> > & data)
175 mul_ui(x, data.first.evaluate(), data.second.data().evaluate());
180 const MulOp<RealContext, std::pair<D, expressions::Expression<RealContext, expressions::ConversionWrapper<signed long>, expressions::ConvertOp_Context> > > &,
181 const std::pair<D, expressions::Expression<RealContext, expressions::ConversionWrapper<signed long>, expressions::ConvertOp_Context> > & data)
183 mul_si(x, data.first.evaluate(), data.second.data().evaluate());
188 const MulOp<RealContext, std::pair<D, expressions::Expression<RealContext, expressions::ConversionWrapper<double>, expressions::ConvertOp_Context> > > &,
189 const std::pair<D, expressions::Expression<RealContext, expressions::ConversionWrapper<double>, expressions::ConvertOp_Context> > & data)
191 mul_d(x, data.first.evaluate(), data.second.data().evaluate());
194 template<
class D1,
class D2,
template<
typename,
typename>
class O2,
class E>
196 const MulOp<RealContext, std::pair<D1, Expression<RealContext, Expression<IntegerContext, D2, O2>, ConvertOp_Context> > > &,
197 const std::pair<D1, Expression<RealContext, Expression<IntegerContext, D2, O2>, ConvertOp_Context> > & data)
199 mul_z(x, data.first.evaluate(), data.second.data().evaluate());
204 const MulOp<RealContext, std::pair<expressions::Expression<RealContext, expressions::ConversionWrapper<unsigned long>, expressions::ConvertOp_Context>, D> > &,
205 const std::pair<expressions::Expression<RealContext, expressions::ConversionWrapper<unsigned long>, expressions::ConvertOp_Context>, D> & data)
207 mul_ui(x, data.second.evaluate(), data.first.data().evaluate());
212 const MulOp<RealContext, std::pair<expressions::Expression<RealContext, expressions::ConversionWrapper<signed long>, expressions::ConvertOp_Context>, D> > &,
213 const std::pair<expressions::Expression<RealContext, expressions::ConversionWrapper<signed long>, expressions::ConvertOp_Context>, D> & data)
215 mul_si(x, data.second.evaluate(), data.first.data().evaluate());
220 const MulOp<RealContext, std::pair<expressions::Expression<RealContext, expressions::ConversionWrapper<double>, expressions::ConvertOp_Context>, D> > &,
221 const std::pair<expressions::Expression<RealContext, expressions::ConversionWrapper<double>, expressions::ConvertOp_Context>, D> & data)
223 mul_d(x, data.second.evaluate(), data.first.data().evaluate());
226 template<
class D1,
class D2,
template<
typename,
typename>
class O2,
class E>
228 const MulOp<RealContext, std::pair<Expression<RealContext, Expression<IntegerContext, D2, O2>, ConvertOp_Context>, D1> > &,
229 const std::pair<Expression<RealContext, Expression<IntegerContext, D2, O2>, ConvertOp_Context>, D1> & data)
231 mul_z(x, data.second.evaluate(), data.first.data().evaluate());
237 const DivOp<RealContext, std::pair<D, expressions::Expression<RealContext, expressions::ConversionWrapper<unsigned long>, expressions::ConvertOp_Context> > > &,
238 const std::pair<D, expressions::Expression<RealContext, expressions::ConversionWrapper<unsigned long>, expressions::ConvertOp_Context> > & data)
240 div_ui(x, data.first.evaluate(), data.second.data().evaluate());
245 const DivOp<RealContext, std::pair<D, expressions::Expression<RealContext, expressions::ConversionWrapper<signed long>, expressions::ConvertOp_Context> > > &,
246 const std::pair<D, expressions::Expression<RealContext, expressions::ConversionWrapper<signed long>, expressions::ConvertOp_Context> > & data)
248 div_si(x, data.first.evaluate(), data.second.data().evaluate());
253 const DivOp<RealContext, std::pair<D, expressions::Expression<RealContext, expressions::ConversionWrapper<double>, expressions::ConvertOp_Context> > > &,
254 const std::pair<D, expressions::Expression<RealContext, expressions::ConversionWrapper<double>, expressions::ConvertOp_Context> > & data)
256 div_d(x, data.first.evaluate(), data.second.data().evaluate());
259 template<
class D1,
class D2,
template<
typename,
typename>
class O2,
class E>
261 const DivOp<RealContext, std::pair<D1, Expression<RealContext, Expression<IntegerContext, D2, O2>, ConvertOp_Context> > > &,
262 const std::pair<D1, Expression<RealContext, Expression<IntegerContext, D2, O2>, ConvertOp_Context> > & data)
264 div_z(x, data.first.evaluate(), data.second.data().evaluate());
269 const DivOp<RealContext, std::pair<expressions::Expression<RealContext, expressions::ConversionWrapper<unsigned long>, expressions::ConvertOp_Context>, D> > &,
270 const std::pair<expressions::Expression<RealContext, expressions::ConversionWrapper<unsigned long>, expressions::ConvertOp_Context>, D> & data)
272 ui_div(x, data.first.data().evaluate(), data.second.evaluate());
277 const DivOp<RealContext, std::pair<expressions::Expression<RealContext, expressions::ConversionWrapper<signed long>, expressions::ConvertOp_Context>, D> > &,
278 const std::pair<expressions::Expression<RealContext, expressions::ConversionWrapper<signed long>, expressions::ConvertOp_Context>, D> & data)
280 si_div(x, data.first.data().evaluate(), data.second.evaluate());
285 const DivOp<RealContext, std::pair<expressions::Expression<RealContext, expressions::ConversionWrapper<double>, expressions::ConvertOp_Context>, D> > &,
286 const std::pair<expressions::Expression<RealContext, expressions::ConversionWrapper<double>, expressions::ConvertOp_Context>, D> & data)
288 d_div(x, data.first.data().evaluate(), data.second.evaluate());
341 inline expressions::Expression<RealContext, expressions::Wrapper<RealContext>,
352 inline expressions::Expression<RealContext, std::pair<expressions::Wrapper<RealContext>,
353 expressions::Wrapper<RealContext> >,
358 expressions::Wrapper<RealContext>(b))); }
366 inline expressions::Expression<RealContext, std::pair<expressions::Wrapper<RealContext>,
367 expressions::Wrapper<RealContext> >,
372 expressions::Wrapper<RealContext>(b))); }
380 inline expressions::Expression<RealContext, std::pair<expressions::Wrapper<RealContext>,
381 expressions::Wrapper<RealContext> >,
386 expressions::Wrapper<RealContext>(b))); }
394 inline expressions::Expression<RealContext, std::pair<expressions::Wrapper<RealContext>,
395 expressions::Wrapper<RealContext> >,
400 expressions::Wrapper<RealContext>(b))); }
408 inline expressions::Expression<RealContext, std::pair<expressions::Wrapper<RealContext>,
409 expressions::Wrapper<RealContext> >,
414 expressions::Wrapper<RealContext>(b))); }
424 inline expressions::Expression<RealContext, std::pair<expressions::Wrapper<RealContext>,
425 expressions::Wrapper<RealContext> >,
430 expressions::Wrapper<RealContext>(b))); }
441 inline expressions::Expression<RealContext, std::pair<expressions::Wrapper<RealContext>,
442 expressions::Wrapper<RealContext> >,
447 expressions::Wrapper<RealContext>(b))); }
456 inline expressions::Expression<RealContext, expressions::Wrapper<RealContext>,
468 inline expressions::Expression<RealContext, expressions::Wrapper<RealContext>,
475 template<
class A2,
template<
typename,
typename>
class O2>
476 inline expressions::Expression<RealContext, std::pair<expressions::Wrapper<RealContext>,
477 expressions::Expression<RealContext, A2, O2> >,
478 expressions::AddOp>
operator + (
const Real & a,
const expressions::Expression<RealContext, A2, O2> & b)
479 {
return expressions::Expression<RealContext, std::pair<expressions::Wrapper<RealContext>,
480 expressions::Expression<RealContext, A2, O2> >,
481 expressions::AddOp>(std::make_pair(expressions::Wrapper<RealContext>(a), b)); }
482 template<
class A2,
template<
typename,
typename>
class O2>
483 inline expressions::Expression<RealContext, std::pair<expressions::Wrapper<RealContext>,
484 expressions::Expression<RealContext, A2, O2> >,
485 expressions::SubOp>
operator - (
const Real & a,
const expressions::Expression<RealContext, A2, O2> & b)
486 {
return expressions::Expression<RealContext, std::pair<expressions::Wrapper<RealContext>,
487 expressions::Expression<RealContext, A2, O2> >,
488 expressions::SubOp>(std::make_pair(expressions::Wrapper<RealContext>(a), b)); }
489 template<
class A2,
template<
typename,
typename>
class O2>
490 inline expressions::Expression<RealContext, std::pair<expressions::Wrapper<RealContext>,
491 expressions::Expression<RealContext, A2, O2> >,
492 expressions::MulOp>
operator * (
const Real & a,
const expressions::Expression<RealContext, A2, O2> & b)
493 {
return expressions::Expression<RealContext, std::pair<expressions::Wrapper<RealContext>,
494 expressions::Expression<RealContext, A2, O2> >,
495 expressions::MulOp>(std::make_pair(expressions::Wrapper<RealContext>(a), b)); }
496 template<
class A2,
template<
typename,
typename>
class O2>
497 inline expressions::Expression<RealContext, std::pair<expressions::Wrapper<RealContext>,
498 expressions::Expression<RealContext, A2, O2> >,
499 expressions::DivOp>
operator / (
const Real & a,
const expressions::Expression<RealContext, A2, O2> & b)
500 {
return expressions::Expression<RealContext, std::pair<expressions::Wrapper<RealContext>,
501 expressions::Expression<RealContext, A2, O2> >,
502 expressions::DivOp>(std::make_pair(expressions::Wrapper<RealContext>(a), b)); }
503 template<
class A2,
template<
typename,
typename>
class O2>
504 inline expressions::Expression<RealContext, std::pair<expressions::Wrapper<RealContext>,
505 expressions::Expression<RealContext, A2, O2> >,
506 expressions::ModOp>
operator % (
const Real & a,
const expressions::Expression<RealContext, A2, O2> & b)
507 {
return expressions::Expression<RealContext, std::pair<expressions::Wrapper<RealContext>,
508 expressions::Expression<RealContext, A2, O2> >,
509 expressions::ModOp>(std::make_pair(expressions::Wrapper<RealContext>(a), b)); }
510 template<
class A2,
template<
typename,
typename>
class O2>
511 inline expressions::Expression<RealContext, std::pair<expressions::Wrapper<RealContext>,
512 expressions::Expression<RealContext, A2, O2> >,
513 expressions::ShLOp> operator << (const Real & a, const expressions::Expression<RealContext, A2, O2> & b)
514 {
return expressions::Expression<RealContext, std::pair<expressions::Wrapper<RealContext>,
515 expressions::Expression<RealContext, A2, O2> >,
516 expressions::ShLOp>(std::make_pair(expressions::Wrapper<RealContext>(a), b)); }
517 template<
class A2,
template<
typename,
typename>
class O2>
518 inline expressions::Expression<RealContext, std::pair<expressions::Wrapper<RealContext>,
519 expressions::Expression<RealContext, A2, O2> >,
520 expressions::ShROp>
operator >> (
const Real & a,
const expressions::Expression<RealContext, A2, O2> & b)
521 {
return expressions::Expression<RealContext, std::pair<expressions::Wrapper<RealContext>,
522 expressions::Expression<RealContext, A2, O2> >,
523 expressions::ShROp>(std::make_pair(expressions::Wrapper<RealContext>(a), b)); }
525 namespace expressions
528 template<
class A1,
template<
typename,
typename>
class O1>
529 inline expressions::Expression<RealContext, expressions::Expression<RealContext, A1, O1>,
530 expressions::NegOp> operator - (
const expressions::Expression<RealContext, A1, O1> & a)
531 {
return expressions::Expression<RealContext, expressions::Expression<RealContext, A1, O1>,
532 expressions::NegOp>(a); }
533 template<
class A1,
template<
typename,
typename>
class O1>
534 inline expressions::Expression<RealContext, std::pair<expressions::Expression<RealContext, A1, O1>,
535 expressions::Wrapper<RealContext> >,
536 expressions::AddOp> operator + (
const expressions::Expression<RealContext, A1, O1> & a,
537 const arithmetic::Real & b)
538 {
return expressions::Expression<RealContext, std::pair<expressions::Expression<RealContext, A1, O1>,
539 expressions::Wrapper<RealContext> >,
540 expressions::AddOp>(std::make_pair(a, expressions::Wrapper<RealContext>(b))); }
541 template<
class A1,
template<
typename,
typename>
class O1>
542 inline expressions::Expression<RealContext, std::pair<expressions::Expression<RealContext, A1, O1>,
543 expressions::Wrapper<RealContext> >,
544 expressions::SubOp> operator - (
const expressions::Expression<RealContext, A1, O1> & a,
545 const arithmetic::Real & b)
546 {
return expressions::Expression<RealContext, std::pair<expressions::Expression<RealContext, A1, O1>,
547 expressions::Wrapper<RealContext> >,
548 expressions::SubOp>(std::make_pair(a, expressions::Wrapper<RealContext>(b))); }
549 template<
class A1,
template<
typename,
typename>
class O1>
550 inline expressions::Expression<RealContext, std::pair<expressions::Expression<RealContext, A1, O1>,
551 expressions::Wrapper<RealContext> >,
552 expressions::MulOp> operator * (
const expressions::Expression<RealContext, A1, O1> & a,
553 const arithmetic::Real & b)
554 {
return expressions::Expression<RealContext, std::pair<expressions::Expression<RealContext, A1, O1>,
555 expressions::Wrapper<RealContext> >,
556 expressions::MulOp>(std::make_pair(a, expressions::Wrapper<RealContext>(b))); }
557 template<
class A1,
template<
typename,
typename>
class O1>
558 inline expressions::Expression<RealContext, std::pair<expressions::Expression<RealContext, A1, O1>,
559 expressions::Wrapper<RealContext> >,
560 expressions::DivOp> operator / (
const expressions::Expression<RealContext, A1, O1> & a,
561 const arithmetic::Real & b)
562 {
return expressions::Expression<RealContext, std::pair<expressions::Expression<RealContext, A1, O1>,
563 expressions::Wrapper<RealContext> >,
564 expressions::DivOp>(std::make_pair(a, expressions::Wrapper<RealContext>(b))); }
565 template<
class A1,
template<
typename,
typename>
class O1>
566 inline expressions::Expression<RealContext, std::pair<expressions::Expression<RealContext, A1, O1>,
567 expressions::Wrapper<RealContext> >,
568 expressions::ModOp> operator % (
const expressions::Expression<RealContext, A1, O1> & a,
569 const arithmetic::Real & b)
570 {
return expressions::Expression<RealContext, std::pair<expressions::Expression<RealContext, A1, O1>,
571 expressions::Wrapper<RealContext> >,
572 expressions::ModOp>(std::make_pair(a, expressions::Wrapper<RealContext>(b))); }
573 template<
class A1,
template<
typename,
typename>
class O1>
574 inline expressions::Expression<RealContext, std::pair<expressions::Expression<RealContext, A1, O1>,
575 expressions::Wrapper<RealContext> >,
576 expressions::ShLOp> operator << (const expressions::Expression<RealContext, A1, O1> & a,
577 const arithmetic::Real & b)
578 {
return expressions::Expression<RealContext, std::pair<expressions::Expression<RealContext, A1, O1>,
579 expressions::Wrapper<RealContext> >,
580 expressions::ShLOp>(std::make_pair(a, expressions::Wrapper<RealContext>(b))); }
581 template<
class A1,
template<
typename,
typename>
class O1>
582 inline expressions::Expression<RealContext, std::pair<expressions::Expression<RealContext, A1, O1>,
583 expressions::Wrapper<RealContext> >,
584 expressions::ShROp> operator >> (
const expressions::Expression<RealContext, A1, O1> & a,
585 const arithmetic::Real & b)
586 {
return expressions::Expression<RealContext, std::pair<expressions::Expression<RealContext, A1, O1>,
587 expressions::Wrapper<RealContext> >,
588 expressions::ShROp>(std::make_pair(a, expressions::Wrapper<RealContext>(b))); }
589 template<
class A1,
template<
typename,
typename>
class O1>
590 inline expressions::Expression<RealContext, expressions::Expression<RealContext, A1, O1>,
591 expressions::ShiftCOp> operator << (const expressions::Expression<RealContext, A1, O1> & a,
593 {
return expressions::Expression<RealContext, expressions::Expression<RealContext, A1, O1>,
594 expressions::ShiftCOp>(a, b); }
595 template<
class A1,
template<
typename,
typename>
class O1>
596 inline expressions::Expression<RealContext, expressions::Expression<RealContext, A1, O1>,
597 expressions::ShiftCOp> operator >> (
const expressions::Expression<RealContext, A1, O1> & a,
599 {
return expressions::Expression<RealContext, expressions::Expression<RealContext, A1, O1>,
600 expressions::ShiftCOp>(a, -b); }
603 template<
class A1,
template<
typename,
typename>
class O1,
class A2,
template<
typename,
typename>
class O2>
604 inline expressions::Expression<RealContext, std::pair<expressions::Expression<RealContext, A1, O1>,
605 expressions::Expression<RealContext, A2, O2> >,
606 expressions::AddOp> operator + (
const expressions::Expression<RealContext, A1, O1> & a,
607 const expressions::Expression<RealContext, A2, O2> & b)
608 {
return expressions::Expression<RealContext, std::pair<expressions::Expression<RealContext, A1, O1>,
609 expressions::Expression<RealContext, A2, O2> >,
610 expressions::AddOp>(std::make_pair(a, b)); }
611 template<
class A1,
template<
typename,
typename>
class O1,
class A2,
template<
typename,
typename>
class O2>
612 inline expressions::Expression<RealContext, std::pair<expressions::Expression<RealContext, A1, O1>,
613 expressions::Expression<RealContext, A2, O2> >,
614 expressions::SubOp> operator - (
const expressions::Expression<RealContext, A1, O1> & a,
615 const expressions::Expression<RealContext, A2, O2> & b)
616 {
return expressions::Expression<RealContext, std::pair<expressions::Expression<RealContext, A1, O1>,
617 expressions::Expression<RealContext, A2, O2> >,
618 expressions::SubOp>(std::make_pair(a, b)); }
619 template<
class A1,
template<
typename,
typename>
class O1,
class A2,
template<
typename,
typename>
class O2>
620 inline expressions::Expression<RealContext, std::pair<expressions::Expression<RealContext, A1, O1>,
621 expressions::Expression<RealContext, A2, O2> >,
622 expressions::MulOp> operator * (
const expressions::Expression<RealContext, A1, O1> & a,
623 const expressions::Expression<RealContext, A2, O2> & b)
624 {
return expressions::Expression<RealContext, std::pair<expressions::Expression<RealContext, A1, O1>,
625 expressions::Expression<RealContext, A2, O2> >,
626 expressions::MulOp>(std::make_pair(a, b)); }
627 template<
class A1,
template<
typename,
typename>
class O1,
class A2,
template<
typename,
typename>
class O2>
628 inline expressions::Expression<RealContext, std::pair<expressions::Expression<RealContext, A1, O1>,
629 expressions::Expression<RealContext, A2, O2> >,
630 expressions::DivOp> operator / (
const expressions::Expression<RealContext, A1, O1> & a,
631 const expressions::Expression<RealContext, A2, O2> & b)
632 {
return expressions::Expression<RealContext, std::pair<expressions::Expression<RealContext, A1, O1>,
633 expressions::Expression<RealContext, A2, O2> >,
634 expressions::DivOp>(std::make_pair(a, b)); }
635 template<
class A1,
template<
typename,
typename>
class O1,
class A2,
template<
typename,
typename>
class O2>
636 inline expressions::Expression<RealContext, std::pair<expressions::Expression<RealContext, A1, O1>,
637 expressions::Expression<RealContext, A2, O2> >,
638 expressions::ModOp> operator % (
const expressions::Expression<RealContext, A1, O1> & a,
639 const expressions::Expression<RealContext, A2, O2> & b)
640 {
return expressions::Expression<RealContext, std::pair<expressions::Expression<RealContext, A1, O1>,
641 expressions::Expression<RealContext, A2, O2> >,
642 expressions::ModOp>(std::make_pair(a, b)); }
643 template<
class A1,
template<
typename,
typename>
class O1,
class A2,
template<
typename,
typename>
class O2>
644 inline expressions::Expression<RealContext, std::pair<expressions::Expression<RealContext, A1, O1>,
645 expressions::Expression<RealContext, A2, O2> >,
646 expressions::ShLOp> operator << (const expressions::Expression<RealContext, A1, O1> & a,
647 const expressions::Expression<RealContext, A2, O2> & b)
648 {
return expressions::Expression<RealContext, std::pair<expressions::Expression<RealContext, A1, O1>,
649 expressions::Expression<RealContext, A2, O2> >,
650 expressions::ShLOp>(std::make_pair(a, b)); }
651 template<
class A1,
template<
typename,
typename>
class O1,
class A2,
template<
typename,
typename>
class O2>
652 inline expressions::Expression<RealContext, std::pair<expressions::Expression<RealContext, A1, O1>,
653 expressions::Expression<RealContext, A2, O2> >,
654 expressions::ShROp> operator >> (
const expressions::Expression<RealContext, A1, O1> & a,
655 const expressions::Expression<RealContext, A2, O2> & b)
656 {
return expressions::Expression<RealContext, std::pair<expressions::Expression<RealContext, A1, O1>,
657 expressions::Expression<RealContext, A2, O2> >,
658 expressions::ShROp>(std::make_pair(a, b)); }
660 template<
class A,
template<
typename,
typename>
class O>
661 inline bool isZero(
const expressions::Expression<RealContext, A, O> & r)
663 return isZero(r.evaluate());
666 template<
class A,
template<
typename,
typename>
class O>
667 inline bool isOne(
const expressions::Expression<RealContext, A, O> & r)
669 return isOne(r.evaluate());
672 template<
class A,
template<
typename,
typename>
class O>
673 inline bool isPositive(
const expressions::Expression<RealContext, A, O> & r)
675 return isPositive(r.evaluate());
678 template<
class A,
template<
typename,
typename>
class O>
679 inline bool isNonNegative(
const expressions::Expression<RealContext, A, O> & r)
681 return isNonNegative(r.evaluate());
684 template<
class A,
template<
typename,
typename>
class O>
685 inline bool isNegative(
const expressions::Expression<RealContext, A, O> & r)
687 return isNegative(r.evaluate());
690 template<
class A,
template<
typename,
typename>
class O>
691 inline bool isNonPositive(
const expressions::Expression<RealContext, A, O> & r)
693 return isZero(r.evaluate());
696 template<
class A,
template<
typename,
typename>
class O>
697 inline std::ostream & operator << (std::ostream & s, const expressions::Expression<RealContext, A, O> & r)
699 return s << r.evaluate();
733 submul(cur, E.
data().first.evaluate(), E.
data().second.evaluate());
763 addmul(cur, E.
data().first.evaluate(), E.
data().second.evaluate());
934 return mpfr_equal_p(a.d_value, b.d_value);
946 return !mpfr_equal_p(a.d_value, b.d_value);
958 return mpfr_lessequal_p(a.d_value, b.d_value);
970 return mpfr_greaterequal_p(a.d_value, b.d_value);
982 return mpfr_less_p(a.d_value, b.d_value);
994 return mpfr_greater_p(a.d_value, b.d_value);
1000 template<
class A2,
template<
typename,
typename>
class O2>
1001 inline bool operator == (
const Real & a,
const expressions::Expression<RealContext, A2, O2> & b)
1003 return expressions::make_expression<RealContext>(a) == b;
1006 template<
class A2,
template<
typename,
typename>
class O2>
1007 inline bool operator != (
const Real & a,
const expressions::Expression<RealContext, A2, O2> & b)
1009 return expressions::make_expression<RealContext>(a) != b;
1012 template<
class A2,
template<
typename,
typename>
class O2>
1013 inline bool operator <= (const Real & a, const expressions::Expression<RealContext, A2, O2> & b)
1015 return expressions::make_expression<RealContext>(a) <= b;
1018 template<
class A2,
template<
typename,
typename>
class O2>
1019 inline bool operator >= (
const Real & a,
const expressions::Expression<RealContext, A2, O2> & b)
1021 return expressions::make_expression<RealContext>(a) >= b;
1024 template<
class A2,
template<
typename,
typename>
class O2>
1025 inline bool operator < (const Real & a, const expressions::Expression<RealContext, A2, O2> & b)
1027 return expressions::make_expression<RealContext>(a) < b;
1030 template<
class A2,
template<
typename,
typename>
class O2>
1031 inline bool operator > (
const Real & a,
const expressions::Expression<RealContext, A2, O2> & b)
1033 return expressions::make_expression<RealContext>(a) > b;
1036 namespace expressions
1039 template<
class A1,
template<
typename,
typename>
class O1>
1040 inline bool operator == (
const expressions::Expression<RealContext, A1, O1> & a,
const arithmetic::Real & b)
1042 return a == expressions::make_expression<RealContext>(b);
1045 template<
class A1,
template<
typename,
typename>
class O1>
1046 inline bool operator != (
const expressions::Expression<RealContext, A1, O1> & a,
const arithmetic::Real & b)
1048 return a != expressions::make_expression<RealContext>(b);
1051 template<
class A1,
template<
typename,
typename>
class O1>
1052 inline bool operator <= (const expressions::Expression<RealContext, A1, O1> & a,
const arithmetic::Real & b)
1054 return a <= expressions::make_expression<RealContext>(b);
1057 template<
class A1,
template<
typename,
typename>
class O1>
1058 inline bool operator >= (
const expressions::Expression<RealContext, A1, O1> & a,
const arithmetic::Real & b)
1060 return a >= expressions::make_expression<RealContext>(b);
1063 template<
class A1,
template<
typename,
typename>
class O1>
1064 inline bool operator < (const expressions::Expression<RealContext, A1, O1> & a,
const arithmetic::Real & b)
1066 return a < expressions::make_expression<RealContext>(b);
1069 template<
class A1,
template<
typename,
typename>
class O1>
1070 inline bool operator > (
const expressions::Expression<RealContext, A1, O1> & a,
const arithmetic::Real & b)
1072 return a > expressions::make_expression<RealContext>(b);
1076 template<
class A1,
template<
typename,
typename>
class O1,
class A2,
template<
typename,
typename>
class O2>
1077 inline bool operator == (
const expressions::Expression<RealContext, A1, O1> & a,
const expressions::Expression<RealContext, A2, O2> & b)
1079 return a.evaluate() == b.evaluate();
1082 template<
class A1,
template<
typename,
typename>
class O1,
class A2,
template<
typename,
typename>
class O2>
1083 inline bool operator != (
const expressions::Expression<RealContext, A1, O1> & a,
const expressions::Expression<RealContext, A2, O2> & b)
1085 return a.evaluate() != b.evaluate();
1088 template<
class A1,
template<
typename,
typename>
class O1,
class A2,
template<
typename,
typename>
class O2>
1089 inline bool operator <= (const expressions::Expression<RealContext, A1, O1> & a,
const expressions::Expression<RealContext, A2, O2> & b)
1091 return a.evaluate() <= b.evaluate();
1094 template<
class A1,
template<
typename,
typename>
class O1,
class A2,
template<
typename,
typename>
class O2>
1095 inline bool operator >= (
const expressions::Expression<RealContext, A1, O1> & a,
const expressions::Expression<RealContext, A2, O2> & b)
1097 return a.evaluate() >= b.evaluate();
1100 template<
class A1,
template<
typename,
typename>
class O1,
class A2,
template<
typename,
typename>
class O2>
1101 inline bool operator < (const expressions::Expression<RealContext, A1, O1> & a,
const expressions::Expression<RealContext, A2, O2> & b)
1103 return a.evaluate() < b.evaluate();
1106 template<
class A1,
template<
typename,
typename>
class O1,
class A2,
template<
typename,
typename>
class O2>
1107 inline bool operator > (
const expressions::Expression<RealContext, A1, O1> & a,
const expressions::Expression<RealContext, A2, O2> & b)
1109 return a.evaluate() > b.evaluate();
1113 template<
class A2,
template<
typename,
typename>
class O2>
1114 inline bool operator == (
const expressions::Expression<RealContext, expressions::ConversionWrapper<unsigned long>, expressions::ConvertOp_Context> & a,
1115 const expressions::Expression<RealContext, A2, O2> & b)
1116 {
return compare_ui(b.evaluate(), a.data().evaluate()) == 0; }
1117 template<
class A2,
template<
typename,
typename>
class O2>
1118 inline bool operator != (
const expressions::Expression<RealContext, expressions::ConversionWrapper<unsigned long>, expressions::ConvertOp_Context> & a,
1119 const expressions::Expression<RealContext, A2, O2> & b)
1120 {
return compare_ui(b.evaluate(), a.data().evaluate()) != 0; }
1121 template<
class A2,
template<
typename,
typename>
class O2>
1122 inline bool operator <= (const expressions::Expression<RealContext, expressions::ConversionWrapper<unsigned long>, expressions::ConvertOp_Context> & a,
1123 const expressions::Expression<RealContext, A2, O2> & b)
1124 {
return compare_ui(b.evaluate(), a.data().evaluate()) >= 0; }
1125 template<
class A2,
template<
typename,
typename>
class O2>
1126 inline bool operator >= (
const expressions::Expression<RealContext, expressions::ConversionWrapper<unsigned long>, expressions::ConvertOp_Context> & a,
1127 const expressions::Expression<RealContext, A2, O2> & b)
1128 {
return compare_ui(b.evaluate(), a.data().evaluate()) <= 0; }
1129 template<
class A2,
template<
typename,
typename>
class O2>
1130 inline bool operator < (const expressions::Expression<RealContext, expressions::ConversionWrapper<unsigned long>, expressions::ConvertOp_Context> & a,
1131 const expressions::Expression<RealContext, A2, O2> & b)
1132 {
return compare_ui(b.evaluate(), a.data().evaluate()) > 0; }
1133 template<
class A2,
template<
typename,
typename>
class O2>
1134 inline bool operator > (
const expressions::Expression<RealContext, expressions::ConversionWrapper<unsigned long>, expressions::ConvertOp_Context> & a,
1135 const expressions::Expression<RealContext, A2, O2> & b)
1136 {
return compare_ui(b.evaluate(), a.data().evaluate()) < 0; }
1138 template<
class A2,
template<
typename,
typename>
class O2>
1139 inline bool operator == (
const expressions::Expression<RealContext, expressions::ConversionWrapper<signed long>, expressions::ConvertOp_Context> & a,
1140 const expressions::Expression<RealContext, A2, O2> & b)
1141 {
return compare_si(b.evaluate(), a.data().evaluate()) == 0; }
1142 template<
class A2,
template<
typename,
typename>
class O2>
1143 inline bool operator != (
const expressions::Expression<RealContext, expressions::ConversionWrapper<signed long>, expressions::ConvertOp_Context> & a,
1144 const expressions::Expression<RealContext, A2, O2> & b)
1145 {
return compare_si(b.evaluate(), a.data().evaluate()) != 0; }
1146 template<
class A2,
template<
typename,
typename>
class O2>
1147 inline bool operator <= (const expressions::Expression<RealContext, expressions::ConversionWrapper<signed long>, expressions::ConvertOp_Context> & a,
1148 const expressions::Expression<RealContext, A2, O2> & b)
1149 {
return compare_si(b.evaluate(), a.data().evaluate()) >= 0; }
1150 template<
class A2,
template<
typename,
typename>
class O2>
1151 inline bool operator >= (
const expressions::Expression<RealContext, expressions::ConversionWrapper<signed long>, expressions::ConvertOp_Context> & a,
1152 const expressions::Expression<RealContext, A2, O2> & b)
1153 {
return compare_si(b.evaluate(), a.data().evaluate()) <= 0; }
1154 template<
class A2,
template<
typename,
typename>
class O2>
1155 inline bool operator < (const expressions::Expression<RealContext, expressions::ConversionWrapper<signed long>, expressions::ConvertOp_Context> & a,
1156 const expressions::Expression<RealContext, A2, O2> & b)
1157 {
return compare_si(b.evaluate(), a.data().evaluate()) > 0; }
1158 template<
class A2,
template<
typename,
typename>
class O2>
1159 inline bool operator > (
const expressions::Expression<RealContext, expressions::ConversionWrapper<signed long>, expressions::ConvertOp_Context> & a,
1160 const expressions::Expression<RealContext, A2, O2> & b)
1161 {
return compare_si(b.evaluate(), a.data().evaluate()) < 0; }
1163 template<
class A2,
template<
typename,
typename>
class O2>
1164 inline bool operator == (
const expressions::Expression<RealContext, expressions::ConversionWrapper<double>, expressions::ConvertOp_Context> & a,
1165 const expressions::Expression<RealContext, A2, O2> & b)
1166 {
return compare_d(b.evaluate(), a.data().evaluate()) == 0; }
1167 template<
class A2,
template<
typename,
typename>
class O2>
1168 inline bool operator != (
const expressions::Expression<RealContext, expressions::ConversionWrapper<double>, expressions::ConvertOp_Context> & a,
1169 const expressions::Expression<RealContext, A2, O2> & b)
1170 {
return compare_d(b.evaluate(), a.data().evaluate()) != 0; }
1171 template<
class A2,
template<
typename,
typename>
class O2>
1172 inline bool operator <= (const expressions::Expression<RealContext, expressions::ConversionWrapper<double>, expressions::ConvertOp_Context> & a,
1173 const expressions::Expression<RealContext, A2, O2> & b)
1174 {
return compare_d(b.evaluate(), a.data().evaluate()) >= 0; }
1175 template<
class A2,
template<
typename,
typename>
class O2>
1176 inline bool operator >= (
const expressions::Expression<RealContext, expressions::ConversionWrapper<double>, expressions::ConvertOp_Context> & a,
1177 const expressions::Expression<RealContext, A2, O2> & b)
1178 {
return compare_d(b.evaluate(), a.data().evaluate()) <= 0; }
1179 template<
class A2,
template<
typename,
typename>
class O2>
1180 inline bool operator < (const expressions::Expression<RealContext, expressions::ConversionWrapper<double>, expressions::ConvertOp_Context> & a,
1181 const expressions::Expression<RealContext, A2, O2> & b)
1182 {
return compare_d(b.evaluate(), a.data().evaluate()) > 0; }
1183 template<
class A2,
template<
typename,
typename>
class O2>
1184 inline bool operator > (
const expressions::Expression<RealContext, expressions::ConversionWrapper<double>, expressions::ConvertOp_Context> & a,
1185 const expressions::Expression<RealContext, A2, O2> & b)
1186 {
return compare_d(b.evaluate(), a.data().evaluate()) < 0; }
1188 template<
class A2,
template<
typename,
typename>
class O2>
1189 inline bool operator == (
const expressions::Expression<RealContext, expressions::ConversionWrapper<long double>, expressions::ConvertOp_Context> & a,
1190 const expressions::Expression<RealContext, A2, O2> & b)
1191 {
return compare_ld(b.evaluate(), a.data().evaluate()) == 0; }
1192 template<
class A2,
template<
typename,
typename>
class O2>
1193 inline bool operator != (
const expressions::Expression<RealContext, expressions::ConversionWrapper<long double>, expressions::ConvertOp_Context> & a,
1194 const expressions::Expression<RealContext, A2, O2> & b)
1195 {
return compare_ld(b.evaluate(), a.data().evaluate()) != 0; }
1196 template<
class A2,
template<
typename,
typename>
class O2>
1197 inline bool operator <= (const expressions::Expression<RealContext, expressions::ConversionWrapper<long double>, expressions::ConvertOp_Context> & a,
1198 const expressions::Expression<RealContext, A2, O2> & b)
1199 {
return compare_ld(b.evaluate(), a.data().evaluate()) >= 0; }
1200 template<
class A2,
template<
typename,
typename>
class O2>
1201 inline bool operator >= (
const expressions::Expression<RealContext, expressions::ConversionWrapper<long double>, expressions::ConvertOp_Context> & a,
1202 const expressions::Expression<RealContext, A2, O2> & b)
1203 {
return compare_ld(b.evaluate(), a.data().evaluate()) <= 0; }
1204 template<
class A2,
template<
typename,
typename>
class O2>
1205 inline bool operator < (const expressions::Expression<RealContext, expressions::ConversionWrapper<long double>, expressions::ConvertOp_Context> & a,
1206 const expressions::Expression<RealContext, A2, O2> & b)
1207 {
return compare_ld(b.evaluate(), a.data().evaluate()) > 0; }
1208 template<
class A2,
template<
typename,
typename>
class O2>
1209 inline bool operator > (
const expressions::Expression<RealContext, expressions::ConversionWrapper<long double>, expressions::ConvertOp_Context> & a,
1210 const expressions::Expression<RealContext, A2, O2> & b)
1211 {
return compare_ld(b.evaluate(), a.data().evaluate()) < 0; }
1213 template<
class D1,
template<
typename,
typename>
class O1,
class A2,
template<
typename,
typename>
class O2>
1214 inline bool operator == (
const Expression<RealContext, Expression<IntegerContext, D1, O1>, ConvertOp_Context> & a,
1215 const expressions::Expression<RealContext, A2, O2> & b)
1216 {
return compare_z(b.evaluate(), a.data().evaluate()) == 0; }
1217 template<
class D1,
template<
typename,
typename>
class O1,
class A2,
template<
typename,
typename>
class O2>
1218 inline bool operator != (
const Expression<RealContext, Expression<IntegerContext, D1, O1>, ConvertOp_Context> & a,
1219 const expressions::Expression<RealContext, A2, O2> & b)
1220 {
return compare_z(b.evaluate(), a.data().evaluate()) != 0; }
1221 template<
class D1,
template<
typename,
typename>
class O1,
class A2,
template<
typename,
typename>
class O2>
1222 inline bool operator <= (const Expression<RealContext, Expression<IntegerContext, D1, O1>, ConvertOp_Context> & a,
1223 const expressions::Expression<RealContext, A2, O2> & b)
1224 {
return compare_z(b.evaluate(), a.data().evaluate()) >= 0; }
1225 template<
class D1,
template<
typename,
typename>
class O1,
class A2,
template<
typename,
typename>
class O2>
1226 inline bool operator >= (
const Expression<RealContext, Expression<IntegerContext, D1, O1>, ConvertOp_Context> & a,
1227 const expressions::Expression<RealContext, A2, O2> & b)
1228 {
return compare_z(b.evaluate(), a.data().evaluate()) <= 0; }
1229 template<
class D1,
template<
typename,
typename>
class O1,
class A2,
template<
typename,
typename>
class O2>
1230 inline bool operator < (const Expression<RealContext, Expression<IntegerContext, D1, O1>, ConvertOp_Context> & a,
1231 const expressions::Expression<RealContext, A2, O2> & b)
1232 {
return compare_z(b.evaluate(), a.data().evaluate()) > 0; }
1233 template<
class D1,
template<
typename,
typename>
class O1,
class A2,
template<
typename,
typename>
class O2>
1234 inline bool operator > (
const Expression<RealContext, Expression<IntegerContext, D1, O1>, ConvertOp_Context> & a,
1235 const expressions::Expression<RealContext, A2, O2> & b)
1236 {
return compare_z(b.evaluate(), a.data().evaluate()) < 0; }
1238 template<
class A2,
template<
typename,
typename>
class O2>
1239 inline bool operator == (
const expressions::Expression<RealContext, expressions::Expression<RealContext, expressions::ConversionWrapper<unsigned long>,
1240 expressions::ConvertOp_Context>, expressions::ShiftCOp> & a,
1241 const expressions::Expression<RealContext, A2, O2> & b)
1242 {
return compare_ui2(b.evaluate(), a.data().data().evaluate(), a.op().shift()) == 0; }
1243 template<
class A2,
template<
typename,
typename>
class O2>
1244 inline bool operator != (
const expressions::Expression<RealContext, expressions::Expression<RealContext, expressions::ConversionWrapper<unsigned long>,
1245 expressions::ConvertOp_Context>, expressions::ShiftCOp> & a,
1246 const expressions::Expression<RealContext, A2, O2> & b)
1247 {
return compare_ui2(b.evaluate(), a.data().data().evaluate(), a.op().shift()) != 0; }
1248 template<
class A2,
template<
typename,
typename>
class O2>
1249 inline bool operator <= (const expressions::Expression<RealContext, expressions::Expression<RealContext, expressions::ConversionWrapper<unsigned long>,
1250 expressions::ConvertOp_Context>, expressions::ShiftCOp> & a,
1251 const expressions::Expression<RealContext, A2, O2> & b)
1252 {
return compare_ui2(b.evaluate(), a.data().data().evaluate(), a.op().shift()) >= 0; }
1253 template<
class A2,
template<
typename,
typename>
class O2>
1254 inline bool operator >= (
const expressions::Expression<RealContext, expressions::Expression<RealContext, expressions::ConversionWrapper<unsigned long>,
1255 expressions::ConvertOp_Context>, expressions::ShiftCOp> & a,
1256 const expressions::Expression<RealContext, A2, O2> & b)
1257 {
return compare_ui2(b.evaluate(), a.data().data().evaluate(), a.op().shift()) <= 0; }
1258 template<
class A2,
template<
typename,
typename>
class O2>
1259 inline bool operator < (const expressions::Expression<RealContext, expressions::Expression<RealContext, expressions::ConversionWrapper<unsigned long>,
1260 expressions::ConvertOp_Context>, expressions::ShiftCOp> & a,
1261 const expressions::Expression<RealContext, A2, O2> & b)
1262 {
return compare_ui2(b.evaluate(), a.data().data().evaluate(), a.op().shift()) > 0; }
1263 template<
class A2,
template<
typename,
typename>
class O2>
1264 inline bool operator > (
const expressions::Expression<RealContext, expressions::Expression<RealContext, expressions::ConversionWrapper<unsigned long>,
1265 expressions::ConvertOp_Context>, expressions::ShiftCOp> & a,
1266 const expressions::Expression<RealContext, A2, O2> & b)
1267 {
return compare_ui2(b.evaluate(), a.data().data().evaluate(), a.op().shift()) < 0; }
1270 template<
class A1,
template<
typename,
typename>
class O1>
1271 inline bool operator == (
const expressions::Expression<RealContext, A1, O1> & a,
1272 const expressions::Expression<RealContext, expressions::ConversionWrapper<unsigned long>, expressions::ConvertOp_Context> & b)
1273 {
return compare_ui(a.evaluate(), b.data().evaluate()) == 0; }
1274 template<
class A1,
template<
typename,
typename>
class O1>
1275 inline bool operator != (
const expressions::Expression<RealContext, A1, O1> & a,
1276 const expressions::Expression<RealContext, expressions::ConversionWrapper<unsigned long>, expressions::ConvertOp_Context> & b)
1277 {
return compare_ui(a.evaluate(), b.data().evaluate()) != 0; }
1278 template<
class A1,
template<
typename,
typename>
class O1>
1279 inline bool operator <= (const expressions::Expression<RealContext, A1, O1> & a,
1280 const expressions::Expression<RealContext, expressions::ConversionWrapper<unsigned long>, expressions::ConvertOp_Context> & b)
1281 {
return compare_ui(a.evaluate(), b.data().evaluate()) <= 0; }
1282 template<
class A1,
template<
typename,
typename>
class O1>
1283 inline bool operator >= (
const expressions::Expression<RealContext, A1, O1> & a,
1284 const expressions::Expression<RealContext, expressions::ConversionWrapper<unsigned long>, expressions::ConvertOp_Context> & b)
1285 {
return compare_ui(a.evaluate(), b.data().evaluate()) >= 0; }
1286 template<
class A1,
template<
typename,
typename>
class O1>
1287 inline bool operator < (const expressions::Expression<RealContext, A1, O1> & a,
1288 const expressions::Expression<RealContext, expressions::ConversionWrapper<unsigned long>, expressions::ConvertOp_Context> & b)
1289 {
return compare_ui(a.evaluate(), b.data().evaluate()) < 0; }
1290 template<
class A1,
template<
typename,
typename>
class O1>
1291 inline bool operator > (
const expressions::Expression<RealContext, A1, O1> & a,
1292 const expressions::Expression<RealContext, expressions::ConversionWrapper<unsigned long>, expressions::ConvertOp_Context> & b)
1293 {
return compare_ui(a.evaluate(), b.data().evaluate()) > 0; }
1295 template<
class A1,
template<
typename,
typename>
class O1>
1296 inline bool operator == (
const expressions::Expression<RealContext, A1, O1> & a,
1297 const expressions::Expression<RealContext, expressions::ConversionWrapper<signed long>, expressions::ConvertOp_Context> & b)
1298 {
return compare_si(a.evaluate(), b.data().evaluate()) == 0; }
1299 template<
class A1,
template<
typename,
typename>
class O1>
1300 inline bool operator != (
const expressions::Expression<RealContext, A1, O1> & a,
1301 const expressions::Expression<RealContext, expressions::ConversionWrapper<signed long>, expressions::ConvertOp_Context> & b)
1302 {
return compare_si(a.evaluate(), b.data().evaluate()) != 0; }
1303 template<
class A1,
template<
typename,
typename>
class O1>
1304 inline bool operator <= (const expressions::Expression<RealContext, A1, O1> & a,
1305 const expressions::Expression<RealContext, expressions::ConversionWrapper<signed long>, expressions::ConvertOp_Context> & b)
1306 {
return compare_si(a.evaluate(), b.data().evaluate()) <= 0; }
1307 template<
class A1,
template<
typename,
typename>
class O1>
1308 inline bool operator >= (
const expressions::Expression<RealContext, A1, O1> & a,
1309 const expressions::Expression<RealContext, expressions::ConversionWrapper<signed long>, expressions::ConvertOp_Context> & b)
1310 {
return compare_si(a.evaluate(), b.data().evaluate()) >= 0; }
1311 template<
class A1,
template<
typename,
typename>
class O1>
1312 inline bool operator < (const expressions::Expression<RealContext, A1, O1> & a,
1313 const expressions::Expression<RealContext, expressions::ConversionWrapper<signed long>, expressions::ConvertOp_Context> & b)
1314 {
return compare_si(a.evaluate(), b.data().evaluate()) < 0; }
1315 template<
class A1,
template<
typename,
typename>
class O1>
1316 inline bool operator > (
const expressions::Expression<RealContext, A1, O1> & a,
1317 const expressions::Expression<RealContext, expressions::ConversionWrapper<signed long>, expressions::ConvertOp_Context> & b)
1318 {
return compare_si(a.evaluate(), b.data().evaluate()) > 0; }
1320 template<
class A1,
template<
typename,
typename>
class O1>
1321 inline bool operator == (
const expressions::Expression<RealContext, A1, O1> & a,
1322 const expressions::Expression<RealContext, expressions::ConversionWrapper<double>, expressions::ConvertOp_Context> & b)
1323 {
return compare_d(a.evaluate(), b.data().evaluate()) == 0; }
1324 template<
class A1,
template<
typename,
typename>
class O1>
1325 inline bool operator != (
const expressions::Expression<RealContext, A1, O1> & a,
1326 const expressions::Expression<RealContext, expressions::ConversionWrapper<double>, expressions::ConvertOp_Context> & b)
1327 {
return compare_d(a.evaluate(), b.data().evaluate()) != 0; }
1328 template<
class A1,
template<
typename,
typename>
class O1>
1329 inline bool operator <= (const expressions::Expression<RealContext, A1, O1> & a,
1330 const expressions::Expression<RealContext, expressions::ConversionWrapper<double>, expressions::ConvertOp_Context> & b)
1331 {
return compare_d(a.evaluate(), b.data().evaluate()) <= 0; }
1332 template<
class A1,
template<
typename,
typename>
class O1>
1333 inline bool operator >= (
const expressions::Expression<RealContext, A1, O1> & a,
1334 const expressions::Expression<RealContext, expressions::ConversionWrapper<double>, expressions::ConvertOp_Context> & b)
1335 {
return compare_d(a.evaluate(), b.data().evaluate()) >= 0; }
1336 template<
class A1,
template<
typename,
typename>
class O1>
1337 inline bool operator < (const expressions::Expression<RealContext, A1, O1> & a,
1338 const expressions::Expression<RealContext, expressions::ConversionWrapper<double>, expressions::ConvertOp_Context> & b)
1339 {
return compare_d(a.evaluate(), b.data().evaluate()) < 0; }
1340 template<
class A1,
template<
typename,
typename>
class O1>
1341 inline bool operator > (
const expressions::Expression<RealContext, A1, O1> & a,
1342 const expressions::Expression<RealContext, expressions::ConversionWrapper<double>, expressions::ConvertOp_Context> & b)
1343 {
return compare_d(a.evaluate(), b.data().evaluate()) > 0; }
1345 template<
class A1,
template<
typename,
typename>
class O1>
1346 inline bool operator == (
const expressions::Expression<RealContext, A1, O1> & a,
1347 const expressions::Expression<RealContext, expressions::ConversionWrapper<long double>, expressions::ConvertOp_Context> & b)
1348 {
return compare_ld(a.evaluate(), b.data().evaluate()) == 0; }
1349 template<
class A1,
template<
typename,
typename>
class O1>
1350 inline bool operator != (
const expressions::Expression<RealContext, A1, O1> & a,
1351 const expressions::Expression<RealContext, expressions::ConversionWrapper<long double>, expressions::ConvertOp_Context> & b)
1352 {
return compare_ld(a.evaluate(), b.data().evaluate()) != 0; }
1353 template<
class A1,
template<
typename,
typename>
class O1>
1354 inline bool operator <= (const expressions::Expression<RealContext, A1, O1> & a,
1355 const expressions::Expression<RealContext, expressions::ConversionWrapper<long double>, expressions::ConvertOp_Context> & b)
1356 {
return compare_ld(a.evaluate(), b.data().evaluate()) <= 0; }
1357 template<
class A1,
template<
typename,
typename>
class O1>
1358 inline bool operator >= (
const expressions::Expression<RealContext, A1, O1> & a,
1359 const expressions::Expression<RealContext, expressions::ConversionWrapper<long double>, expressions::ConvertOp_Context> & b)
1360 {
return compare_ld(a.evaluate(), b.data().evaluate()) >= 0; }
1361 template<
class A1,
template<
typename,
typename>
class O1>
1362 inline bool operator < (const expressions::Expression<RealContext, A1, O1> & a,
1363 const expressions::Expression<RealContext, expressions::ConversionWrapper<long double>, expressions::ConvertOp_Context> & b)
1364 {
return compare_ld(a.evaluate(), b.data().evaluate()) < 0; }
1365 template<
class A1,
template<
typename,
typename>
class O1>
1366 inline bool operator > (
const expressions::Expression<RealContext, A1, O1> & a,
1367 const expressions::Expression<RealContext, expressions::ConversionWrapper<long double>, expressions::ConvertOp_Context> & b)
1368 {
return compare_ld(a.evaluate(), b.data().evaluate()) > 0; }
1370 template<
class A1,
template<
typename,
typename>
class O1,
class D2,
template<
typename,
typename>
class O2>
1371 inline bool operator == (
const expressions::Expression<RealContext, A1, O1> & a,
1372 const Expression<RealContext, Expression<IntegerContext, D2, O2>, ConvertOp_Context> & b)
1373 {
return compare_z(a.evaluate(), b.data().evaluate()) == 0; }
1374 template<
class A1,
template<
typename,
typename>
class O1,
class D2,
template<
typename,
typename>
class O2>
1375 inline bool operator != (
const expressions::Expression<RealContext, A1, O1> & a,
1376 const Expression<RealContext, Expression<IntegerContext, D2, O2>, ConvertOp_Context> & b)
1377 {
return compare_z(a.evaluate(), b.data().evaluate()) != 0; }
1378 template<
class A1,
template<
typename,
typename>
class O1,
class D2,
template<
typename,
typename>
class O2>
1379 inline bool operator <= (const expressions::Expression<RealContext, A1, O1> & a,
1380 const Expression<RealContext, Expression<IntegerContext, D2, O2>, ConvertOp_Context> & b)
1381 {
return compare_z(a.evaluate(), b.data().evaluate()) <= 0; }
1382 template<
class A1,
template<
typename,
typename>
class O1,
class D2,
template<
typename,
typename>
class O2>
1383 inline bool operator >= (
const expressions::Expression<RealContext, A1, O1> & a,
1384 const Expression<RealContext, Expression<IntegerContext, D2, O2>, ConvertOp_Context> & b)
1385 {
return compare_z(a.evaluate(), b.data().evaluate()) >= 0; }
1386 template<
class A1,
template<
typename,
typename>
class O1,
class D2,
template<
typename,
typename>
class O2>
1387 inline bool operator < (const expressions::Expression<RealContext, A1, O1> & a,
1388 const Expression<RealContext, Expression<IntegerContext, D2, O2>, ConvertOp_Context> & b)
1389 {
return compare_z(a.evaluate(), b.data().evaluate()) < 0; }
1390 template<
class A1,
template<
typename,
typename>
class O1,
class D2,
template<
typename,
typename>
class O2>
1391 inline bool operator > (
const expressions::Expression<RealContext, A1, O1> & a,
1392 const Expression<RealContext, Expression<IntegerContext, D2, O2>, ConvertOp_Context> & b)
1393 {
return compare_z(a.evaluate(), b.data().evaluate()) > 0; }
1395 template<
class A2,
template<
typename,
typename>
class O2>
1396 inline bool operator == (
const expressions::Expression<RealContext, A2, O2> & a,
1397 const expressions::Expression<RealContext, expressions::Expression<RealContext, expressions::ConversionWrapper<unsigned long>,
1398 expressions::ConvertOp_Context>, expressions::ShiftCOp> & b)
1399 {
return compare_ui2(a.evaluate(), b.data().data().evaluate(), b.op().shift()) == 0; }
1400 template<
class A2,
template<
typename,
typename>
class O2>
1401 inline bool operator != (
const expressions::Expression<RealContext, A2, O2> & a,
1402 const expressions::Expression<RealContext, expressions::Expression<RealContext, expressions::ConversionWrapper<unsigned long>,
1403 expressions::ConvertOp_Context>, expressions::ShiftCOp> & b)
1404 {
return compare_ui2(a.evaluate(), b.data().data().evaluate(), b.op().shift()) != 0; }
1405 template<
class A2,
template<
typename,
typename>
class O2>
1406 inline bool operator <= (const expressions::Expression<RealContext, A2, O2> & a,
1407 const expressions::Expression<RealContext, expressions::Expression<RealContext, expressions::ConversionWrapper<unsigned long>,
1408 expressions::ConvertOp_Context>, expressions::ShiftCOp> & b)
1409 {
return compare_ui2(a.evaluate(), b.data().data().evaluate(), b.op().shift()) <= 0; }
1410 template<
class A2,
template<
typename,
typename>
class O2>
1411 inline bool operator >= (
const expressions::Expression<RealContext, A2, O2> & a,
1412 const expressions::Expression<RealContext, expressions::Expression<RealContext, expressions::ConversionWrapper<unsigned long>,
1413 expressions::ConvertOp_Context>, expressions::ShiftCOp> & b)
1414 {
return compare_ui2(a.evaluate(), b.data().data().evaluate(), b.op().shift()) >= 0; }
1415 template<
class A2,
template<
typename,
typename>
class O2>
1416 inline bool operator < (const expressions::Expression<RealContext, A2, O2> & a,
1417 const expressions::Expression<RealContext, expressions::Expression<RealContext, expressions::ConversionWrapper<unsigned long>,
1418 expressions::ConvertOp_Context>, expressions::ShiftCOp> & b)
1419 {
return compare_ui2(a.evaluate(), b.data().data().evaluate(), b.op().shift()) < 0; }
1420 template<
class A2,
template<
typename,
typename>
class O2>
1421 inline bool operator > (
const expressions::Expression<RealContext, A2, O2> & a,
1422 const expressions::Expression<RealContext, expressions::Expression<RealContext, expressions::ConversionWrapper<unsigned long>,
1423 expressions::ConvertOp_Context>, expressions::ShiftCOp> & b)
1424 {
return compare_ui2(a.evaluate(), b.data().data().evaluate(), b.op().shift()) > 0; }
1436 inline expressions::Expression<RealContext, expressions::Wrapper<RealContext>,
1446 inline expressions::Expression<RealContext, expressions::Wrapper<RealContext>,
1461 inline expressions::Expression<RealContext, expressions::Wrapper<RealContext>,
1472 inline expressions::Expression<RealContext, expressions::Wrapper<RealContext>,
1483 inline expressions::Expression<RealContext, expressions::Wrapper<RealContext>,
1494 inline expressions::Expression<RealContext, expressions::Wrapper<RealContext>,
1505 inline expressions::Expression<RealContext, expressions::Wrapper<RealContext>,
1516 inline expressions::Expression<RealContext, expressions::Wrapper<RealContext>,
1529 inline expressions::Expression<RealContext, std::pair<expressions::Wrapper<RealContext>,
1530 expressions::Wrapper<RealContext> >,
1533 expressions::Wrapper<RealContext> >,
1535 expressions::Wrapper<RealContext>(x))); }
1547 inline expressions::Expression<RealContext, expressions::Wrapper<RealContext>,
1558 inline expressions::Expression<RealContext, expressions::Wrapper<RealContext>,
1569 inline expressions::Expression<RealContext, expressions::Wrapper<RealContext>,
1580 inline expressions::Expression<RealContext, expressions::Wrapper<RealContext>,
1591 inline expressions::Expression<RealContext, expressions::Wrapper<RealContext>,
1606 inline expressions::Expression<RealContext, expressions::Wrapper<RealContext>,
1618 inline expressions::Expression<RealContext, expressions::Wrapper<RealContext>,
1632 inline expressions::Expression<RealContext, expressions::Wrapper<RealContext>,
1647 inline expressions::Expression<RealContext, expressions::Wrapper<RealContext>,
1658 inline expressions::Expression<RealContext, expressions::Wrapper<RealContext>,
1669 inline expressions::Expression<RealContext, std::pair<expressions::Wrapper<RealContext>,
1670 expressions::Wrapper<IntegerContext> >,
1675 expressions::Wrapper<IntegerContext>(b))); }
1684 inline expressions::Expression<RealContext, std::pair<expressions::Wrapper<RealContext>,
1685 expressions::Wrapper<RealContext> >,
1688 expressions::Wrapper<RealContext> >,
1690 expressions::Wrapper<RealContext>(b))); }
1693 template<
class A2,
template<
typename,
typename>
class O2>
1694 inline expressions::Expression<RealContext, std::pair<expressions::Wrapper<RealContext>,
1695 expressions::Expression<RealContext, A2, O2> >,
1696 expressions::ATan2Op>
atan2(
const Real & a,
const expressions::Expression<RealContext, A2, O2> & b)
1697 {
return expressions::Expression<RealContext, std::pair<expressions::Wrapper<RealContext>,
1698 expressions::Expression<RealContext, A2, O2> >,
1699 expressions::ATan2Op>(std::make_pair(expressions::Wrapper<RealContext>(a), b)); }
1700 template<
class A2,
template<
typename,
typename>
class O2>
1702 inline expressions::Expression<RealContext, std::pair<expressions::Wrapper<RealContext>,
1703 expressions::Expression<RealContext, A2, O2> >,
1704 expressions::PowerOp>
power(
const Real & a,
const expressions::Expression<RealContext, A2, O2> & b)
1705 {
return expressions::Expression<RealContext, std::pair<expressions::Wrapper<RealContext>,
1706 expressions::Expression<RealContext, A2, O2> >,
1707 expressions::PowerOp>(std::make_pair(expressions::Wrapper<RealContext>(a), b)); }
1709 namespace expressions
1711 template<
class A,
template<
typename,
typename>
class O>
1712 inline expressions::Expression<RealContext, expressions::Expression<RealContext, A, O>,
1713 expressions::AbsOp>
abs(
const expressions::Expression<RealContext, A, O> & b)
1714 {
return expressions::Expression<RealContext, expressions::Expression<RealContext, A, O>,
1715 expressions::AbsOp>(b); }
1716 template<
class A,
template<
typename,
typename>
class O>
1717 inline expressions::Expression<RealContext, expressions::Expression<RealContext, A, O>,
1718 expressions::SquareOp>
square(
const expressions::Expression<RealContext, A, O> & b)
1719 {
return expressions::Expression<RealContext, expressions::Expression<RealContext, A, O>,
1720 expressions::SquareOp>(b); }
1721 template<
class A,
template<
typename,
typename>
class O>
1722 inline expressions::Expression<RealContext, expressions::Expression<RealContext, A, O>,
1723 expressions::SinOp>
sin(
const expressions::Expression<RealContext, A, O> & b)
1724 {
return expressions::Expression<RealContext, expressions::Expression<RealContext, A, O>,
1725 expressions::SinOp>(b); }
1726 template<
class A,
template<
typename,
typename>
class O>
1727 inline expressions::Expression<RealContext, expressions::Expression<RealContext, A, O>,
1728 expressions::CosOp>
cos(
const expressions::Expression<RealContext, A, O> & b)
1729 {
return expressions::Expression<RealContext, expressions::Expression<RealContext, A, O>,
1730 expressions::CosOp>(b); }
1731 template<
class A,
template<
typename,
typename>
class O>
1732 inline expressions::Expression<RealContext, expressions::Expression<RealContext, A, O>,
1733 expressions::TanOp>
tan(
const expressions::Expression<RealContext, A, O> & b)
1734 {
return expressions::Expression<RealContext, expressions::Expression<RealContext, A, O>,
1735 expressions::TanOp>(b); }
1736 template<
class A,
template<
typename,
typename>
class O>
1737 inline expressions::Expression<RealContext, expressions::Expression<RealContext, A, O>,
1738 expressions::ASinOp>
asin(
const expressions::Expression<RealContext, A, O> & b)
1739 {
return expressions::Expression<RealContext, expressions::Expression<RealContext, A, O>,
1740 expressions::ASinOp>(b); }
1741 template<
class A,
template<
typename,
typename>
class O>
1742 inline expressions::Expression<RealContext, expressions::Expression<RealContext, A, O>,
1743 expressions::ACosOp>
acos(
const expressions::Expression<RealContext, A, O> & b)
1744 {
return expressions::Expression<RealContext, expressions::Expression<RealContext, A, O>,
1745 expressions::ACosOp>(b); }
1746 template<
class A,
template<
typename,
typename>
class O>
1747 inline expressions::Expression<RealContext, expressions::Expression<RealContext, A, O>,
1748 expressions::ATanOp>
atan(
const expressions::Expression<RealContext, A, O> & b)
1749 {
return expressions::Expression<RealContext, expressions::Expression<RealContext, A, O>,
1750 expressions::ATanOp>(b); }
1751 template<
class A,
template<
typename,
typename>
class O,
class A2,
template<
typename,
typename>
class O2>
1752 inline expressions::Expression<RealContext, std::pair<expressions::Expression<RealContext, A, O>,
1753 expressions::Expression<RealContext, A2, O2> >,
1754 expressions::ATan2Op>
atan2(
const expressions::Expression<RealContext, A, O> & a,
1755 const expressions::Expression<RealContext, A2, O2> & b)
1756 {
return expressions::Expression<RealContext, std::pair<expressions::Expression<RealContext, A, O>,
1757 expressions::Expression<RealContext, A2, O2> >,
1758 expressions::ATan2Op>(std::make_pair(a, b)); }
1759 template<
class A,
template<
typename,
typename>
class O>
1760 inline expressions::Expression<RealContext, std::pair<expressions::Expression<RealContext, A, O>,
1761 expressions::Wrapper<RealContext> >,
1762 expressions::ATan2Op>
atan2(
const expressions::Expression<RealContext, A, O> & a,
const arithmetic::Real & b)
1763 {
return expressions::Expression<RealContext, std::pair<expressions::Expression<RealContext, A, O>,
1764 expressions::Wrapper<RealContext> >,
1765 expressions::ATan2Op>(std::make_pair(a, expressions::Wrapper<RealContext>(b))); }
1766 template<
class A,
template<
typename,
typename>
class O>
1767 inline expressions::Expression<RealContext, expressions::Expression<RealContext, A, O>,
1768 expressions::ExpOp>
exp(
const expressions::Expression<RealContext, A, O> & b)
1769 {
return expressions::Expression<RealContext, expressions::Expression<RealContext, A, O>,
1770 expressions::ExpOp>(b); }
1771 template<
class A,
template<
typename,
typename>
class O>
1772 inline expressions::Expression<RealContext, expressions::Expression<RealContext, A, O>,
1773 expressions::LogOp>
log(
const expressions::Expression<RealContext, A, O> & b)
1774 {
return expressions::Expression<RealContext, expressions::Expression<RealContext, A, O>,
1775 expressions::LogOp>(b); }
1776 template<
class A,
template<
typename,
typename>
class O>
1777 inline expressions::Expression<RealContext, expressions::Expression<RealContext, A, O>,
1778 expressions::Log2Op>
log2(
const expressions::Expression<RealContext, A, O> & b)
1779 {
return expressions::Expression<RealContext, expressions::Expression<RealContext, A, O>,
1780 expressions::Log2Op>(b); }
1781 template<
class A,
template<
typename,
typename>
class O>
1782 inline expressions::Expression<RealContext, expressions::Expression<RealContext, A, O>,
1783 expressions::Log10Op>
log10(
const expressions::Expression<RealContext, A, O> & b)
1784 {
return expressions::Expression<RealContext, expressions::Expression<RealContext, A, O>,
1785 expressions::Log10Op>(b); }
1786 template<
class A,
template<
typename,
typename>
class O>
1787 inline expressions::Expression<RealContext, expressions::Expression<RealContext, A, O>,
1788 expressions::SqrtOp>
sqrt(
const expressions::Expression<RealContext, A, O> & b)
1789 {
return expressions::Expression<RealContext, expressions::Expression<RealContext, A, O>,
1790 expressions::SqrtOp>(b); }
1791 template<
class A,
template<
typename,
typename>
class O>
1792 inline expressions::Expression<RealContext, expressions::Expression<RealContext, A, O>,
1793 expressions::GammaOp>
gamma(
const expressions::Expression<RealContext, A, O> & b)
1794 {
return expressions::Expression<RealContext, expressions::Expression<RealContext, A, O>,
1795 expressions::GammaOp>(b); }
1796 template<
class A,
template<
typename,
typename>
class O>
1797 inline expressions::Expression<RealContext, expressions::Expression<RealContext, A, O>,
1798 expressions::LGammaOp>
lgamma(
const expressions::Expression<RealContext, A, O> & b)
1799 {
return expressions::Expression<RealContext, expressions::Expression<RealContext, A, O>,
1800 expressions::LGammaOp>(b); }
1801 template<
class A,
template<
typename,
typename>
class O>
1802 inline expressions::Expression<RealContext, expressions::Expression<RealContext, A, O>,
1803 expressions::LGamma2Op>
lgamma(
int &
sign,
const expressions::Expression<RealContext, A, O> & b)
1804 {
return expressions::Expression<RealContext, expressions::Expression<RealContext, A, O>,
1805 expressions::LGamma2Op>(b,
sign); }
1806 template<
class A,
template<
typename,
typename>
class O>
1807 inline expressions::Expression<RealContext, expressions::Expression<RealContext, A, O>,
1808 expressions::PowerCOp<signed long>::impl>
power(
const expressions::Expression<RealContext, A, O> & a,
signed long b)
1809 {
return expressions::Expression<RealContext, expressions::Expression<RealContext, A, O>,
1810 expressions::PowerCOp<signed long>::impl>(a, b); }
1811 template<
class A,
template<
typename,
typename>
class O>
1812 inline expressions::Expression<RealContext, expressions::Expression<RealContext, A, O>,
1813 expressions::PowerCOp<unsigned long>::impl>
power(
const expressions::Expression<RealContext, A, O> & a,
unsigned long b)
1814 {
return expressions::Expression<RealContext, expressions::Expression<RealContext, A, O>,
1815 expressions::PowerCOp<unsigned long>::impl>(a, b); }
1816 template<
class A,
template<
typename,
typename>
class O>
1817 inline expressions::Expression<RealContext, std::pair<expressions::Expression<RealContext, A, O>,
1818 expressions::Wrapper<IntegerContext> >,
1819 expressions::PowerOp>
power(
const expressions::Expression<RealContext, A, O> & a,
const Integer & b)
1820 {
return expressions::Expression<RealContext, std::pair<expressions::Expression<RealContext, A, O>,
1821 expressions::Wrapper<IntegerContext> >,
1822 expressions::PowerOp>(std::make_pair(a, expressions::Wrapper<IntegerContext>(b))); }
1823 template<
class A,
template<
typename,
typename>
class O,
class A2,
template<
typename,
typename>
class O2>
1824 inline expressions::Expression<RealContext, std::pair<expressions::Expression<RealContext, A, O>,
1825 expressions::Expression<RealContext, A2, O2> >,
1826 expressions::PowerOp>
power(
const expressions::Expression<RealContext, A, O> & a,
1827 const expressions::Expression<RealContext, A2, O2> & b)
1828 {
return expressions::Expression<RealContext, std::pair<expressions::Expression<RealContext, A, O>,
1829 expressions::Expression<RealContext, A2, O2> >,
1830 expressions::PowerOp>(std::make_pair(a, b)); }
1831 template<
class A,
template<
typename,
typename>
class O>
1832 inline expressions::Expression<RealContext, std::pair<expressions::Expression<RealContext, A, O>,
1833 expressions::Wrapper<RealContext> >,
1834 expressions::PowerOp>
power(
const expressions::Expression<RealContext, A, O> & a,
const arithmetic::Real & b)
1835 {
return expressions::Expression<RealContext, std::pair<expressions::Expression<RealContext, A, O>,
1836 expressions::Wrapper<RealContext> >,
1837 expressions::PowerOp>(std::make_pair(a, expressions::Wrapper<RealContext>(b))); }
1850 inline expressions::Expression<RealContext, expressions::Wrapper<RealContext>,
1861 inline expressions::Expression<RealContext, expressions::Wrapper<RealContext>,
1877 inline expressions::Expression<RealContext, expressions::Wrapper<RealContext>,
1889 inline expressions::Expression<RealContext, expressions::Wrapper<RealContext>,
1901 inline expressions::Expression<RealContext, expressions::Wrapper<RealContext>,
1913 inline expressions::Expression<RealContext, expressions::Wrapper<RealContext>,
1925 inline expressions::Expression<RealContext, expressions::Wrapper<RealContext>,
1937 inline expressions::Expression<RealContext, expressions::Wrapper<RealContext>,
1951 inline expressions::Expression<RealContext, std::pair<expressions::Wrapper<RealContext>,
1952 expressions::Wrapper<RealContext> >,
1955 expressions::Wrapper<RealContext> >,
1957 expressions::Wrapper<RealContext>(x)), rc); }
1971 inline expressions::Expression<RealContext, expressions::Wrapper<RealContext>,
1983 inline expressions::Expression<RealContext, expressions::Wrapper<RealContext>,
1995 inline expressions::Expression<RealContext, expressions::Wrapper<RealContext>,
2007 inline expressions::Expression<RealContext, expressions::Wrapper<RealContext>,
2019 inline expressions::Expression<RealContext, expressions::Wrapper<RealContext>,
2035 inline expressions::Expression<RealContext, expressions::Wrapper<RealContext>,
2048 inline expressions::Expression<RealContext, expressions::Wrapper<RealContext>,
2063 inline expressions::Expression<RealContext, expressions::Wrapper<RealContext>,
2080 inline expressions::Expression<RealContext, expressions::Wrapper<RealContext>,
2093 inline expressions::Expression<RealContext, expressions::Wrapper<RealContext>,
2106 inline expressions::Expression<RealContext, std::pair<expressions::Wrapper<RealContext>,
2107 expressions::Wrapper<IntegerContext> >,
2110 expressions::Wrapper<IntegerContext> >,
2112 expressions::Wrapper<IntegerContext>(b)), rc); }
2122 inline expressions::Expression<RealContext, std::pair<expressions::Wrapper<RealContext>,
2123 expressions::Wrapper<RealContext> >,
2126 expressions::Wrapper<RealContext> >,
2128 expressions::Wrapper<RealContext>(b)), rc); }
2131 template<
class A2,
template<
typename,
typename>
class O2>
2132 inline expressions::Expression<RealContext, std::pair<expressions::Wrapper<RealContext>,
2133 expressions::Expression<RealContext, A2, O2> >,
2134 expressions::ATan2Op_Context>
atan2(
const Real & a,
const expressions::Expression<RealContext, A2, O2> & b,
2135 const RealContext & rc)
2136 {
return expressions::Expression<RealContext, std::pair<expressions::Wrapper<RealContext>,
2137 expressions::Expression<RealContext, A2, O2> >,
2138 expressions::ATan2Op_Context>(std::make_pair(expressions::Wrapper<RealContext>(a), b), rc); }
2139 template<
class A2,
template<
typename,
typename>
class O2>
2140 inline expressions::Expression<RealContext, std::pair<expressions::Wrapper<RealContext>,
2141 expressions::Expression<RealContext, A2, O2> >,
2142 expressions::PowerOp_Context>
power(
const Real & a,
const expressions::Expression<RealContext, A2, O2> & b,
const RealContext & rc)
2143 {
return expressions::Expression<RealContext, std::pair<expressions::Wrapper<RealContext>,
2144 expressions::Expression<RealContext, A2, O2> >,
2145 expressions::PowerOp_Context>(std::make_pair(expressions::Wrapper<RealContext>(a), b), rc); }
2147 namespace implementation
2151 template<
class A,
template<
typename,
typename>
class O>
2152 inline expressions::Expression<RealContext, expressions::Expression<RealContext, A, O>,
2153 expressions::AbsOp_Context>
abs(
const expressions::Expression<RealContext, A, O> & b,
2154 const RealContext & rc)
2155 {
return expressions::Expression<RealContext, expressions::Expression<RealContext, A, O>,
2156 expressions::AbsOp_Context>(b, rc); }
2157 template<
class A,
template<
typename,
typename>
class O>
2158 inline expressions::Expression<RealContext, expressions::Expression<RealContext, A, O>,
2159 expressions::SquareOp_Context>
square(
const expressions::Expression<RealContext, A, O> & b,
2160 const RealContext & rc)
2161 {
return expressions::Expression<RealContext, expressions::Expression<RealContext, A, O>,
2162 expressions::SquareOp_Context>(b, rc); }
2163 template<
class A,
template<
typename,
typename>
class O>
2164 inline expressions::Expression<RealContext, expressions::Expression<RealContext, A, O>,
2165 expressions::SinOp_Context>
sin(
const expressions::Expression<RealContext, A, O> & b,
2166 const RealContext & rc)
2167 {
return expressions::Expression<RealContext, expressions::Expression<RealContext, A, O>,
2168 expressions::SinOp_Context>(b, rc); }
2169 template<
class A,
template<
typename,
typename>
class O>
2170 inline expressions::Expression<RealContext, expressions::Expression<RealContext, A, O>,
2171 expressions::CosOp_Context>
cos(
const expressions::Expression<RealContext, A, O> & b,
2172 const RealContext & rc)
2173 {
return expressions::Expression<RealContext, expressions::Expression<RealContext, A, O>,
2174 expressions::CosOp_Context>(b, rc); }
2175 template<
class A,
template<
typename,
typename>
class O>
2176 inline expressions::Expression<RealContext, expressions::Expression<RealContext, A, O>,
2177 expressions::TanOp_Context>
tan(
const expressions::Expression<RealContext, A, O> & b,
2178 const RealContext & rc)
2179 {
return expressions::Expression<RealContext, expressions::Expression<RealContext, A, O>,
2180 expressions::TanOp_Context>(b, rc); }
2181 template<
class A,
template<
typename,
typename>
class O>
2182 inline expressions::Expression<RealContext, expressions::Expression<RealContext, A, O>,
2183 expressions::ASinOp_Context>
asin(
const expressions::Expression<RealContext, A, O> & b,
2184 const RealContext & rc)
2185 {
return expressions::Expression<RealContext, expressions::Expression<RealContext, A, O>,
2186 expressions::ASinOp_Context>(b, rc); }
2187 template<
class A,
template<
typename,
typename>
class O>
2188 inline expressions::Expression<RealContext, expressions::Expression<RealContext, A, O>,
2189 expressions::ACosOp_Context>
acos(
const expressions::Expression<RealContext, A, O> & b,
2190 const RealContext & rc)
2191 {
return expressions::Expression<RealContext, expressions::Expression<RealContext, A, O>,
2192 expressions::ACosOp_Context>(b, rc); }
2193 template<
class A,
template<
typename,
typename>
class O>
2194 inline expressions::Expression<RealContext, expressions::Expression<RealContext, A, O>,
2195 expressions::ATanOp_Context>
atan(
const expressions::Expression<RealContext, A, O> & b,
2196 const RealContext & rc)
2197 {
return expressions::Expression<RealContext, expressions::Expression<RealContext, A, O>,
2198 expressions::ATanOp_Context>(b, rc); }
2199 template<
class A,
template<
typename,
typename>
class O,
class A2,
template<
typename,
typename>
class O2>
2200 inline expressions::Expression<RealContext, std::pair<expressions::Expression<RealContext, A, O>,
2201 expressions::Expression<RealContext, A2, O2> >,
2202 expressions::ATan2Op_Context>
atan2(
const expressions::Expression<RealContext, A, O> & a,
2203 const expressions::Expression<RealContext, A2, O2> & b,
2204 const RealContext & rc)
2205 {
return expressions::Expression<RealContext, std::pair<expressions::Expression<RealContext, A, O>,
2206 expressions::Expression<RealContext, A2, O2> >,
2207 expressions::ATan2Op_Context>(std::make_pair(a, b), rc); }
2208 template<
class A,
template<
typename,
typename>
class O>
2209 inline expressions::Expression<RealContext, std::pair<expressions::Expression<RealContext, A, O>,
2210 expressions::Wrapper<RealContext> >,
2211 expressions::ATan2Op_Context>
atan2(
const expressions::Expression<RealContext, A, O> & a,
2212 const arithmetic::Real & b,
const RealContext & rc)
2213 {
return expressions::Expression<RealContext, std::pair<expressions::Expression<RealContext, A, O>,
2214 expressions::Wrapper<RealContext> >,
2215 expressions::ATan2Op_Context>(std::make_pair(a, expressions::Wrapper<RealContext>(b)), rc); }
2216 template<
class A,
template<
typename,
typename>
class O>
2217 inline expressions::Expression<RealContext, expressions::Expression<RealContext, A, O>,
2218 expressions::ExpOp_Context>
exp(
const expressions::Expression<RealContext, A, O> & b,
2219 const RealContext & rc)
2220 {
return expressions::Expression<RealContext, expressions::Expression<RealContext, A, O>,
2221 expressions::ExpOp_Context>(b, rc); }
2222 template<
class A,
template<
typename,
typename>
class O>
2223 inline expressions::Expression<RealContext, expressions::Expression<RealContext, A, O>,
2224 expressions::LogOp_Context>
log(
const expressions::Expression<RealContext, A, O> & b,
2225 const RealContext & rc)
2226 {
return expressions::Expression<RealContext, expressions::Expression<RealContext, A, O>,
2227 expressions::LogOp_Context>(b, rc); }
2228 template<
class A,
template<
typename,
typename>
class O>
2229 inline expressions::Expression<RealContext, expressions::Expression<RealContext, A, O>,
2230 expressions::Log2Op_Context>
log2(
const expressions::Expression<RealContext, A, O> & b,
2231 const RealContext & rc)
2232 {
return expressions::Expression<RealContext, expressions::Expression<RealContext, A, O>,
2233 expressions::Log2Op_Context>(b, rc); }
2234 template<
class A,
template<
typename,
typename>
class O>
2235 inline expressions::Expression<RealContext, expressions::Expression<RealContext, A, O>,
2236 expressions::Log10Op_Context>
log10(
const expressions::Expression<RealContext, A, O> & b,
2237 const RealContext & rc)
2238 {
return expressions::Expression<RealContext, expressions::Expression<RealContext, A, O>,
2239 expressions::Log10Op_Context>(b, rc); }
2240 template<
class A,
template<
typename,
typename>
class O>
2241 inline expressions::Expression<RealContext, expressions::Expression<RealContext, A, O>,
2242 expressions::SqrtOp_Context>
sqrt(
const expressions::Expression<RealContext, A, O> & b,
2243 const RealContext & rc)
2244 {
return expressions::Expression<RealContext, expressions::Expression<RealContext, A, O>,
2245 expressions::SqrtOp_Context>(b, rc); }
2246 template<
class A,
template<
typename,
typename>
class O>
2247 inline expressions::Expression<RealContext, expressions::Expression<RealContext, A, O>,
2248 expressions::GammaOp_Context>
gamma(
const expressions::Expression<RealContext, A, O> & b,
2249 const RealContext & rc)
2250 {
return expressions::Expression<RealContext, expressions::Expression<RealContext, A, O>,
2251 expressions::GammaOp_Context>(b, rc); }
2252 template<
class A,
template<
typename,
typename>
class O>
2253 inline expressions::Expression<RealContext, expressions::Expression<RealContext, A, O>,
2254 expressions::LGammaOp_Context>
lgamma(
const expressions::Expression<RealContext, A, O> & b,
2255 const RealContext & rc)
2256 {
return expressions::Expression<RealContext, expressions::Expression<RealContext, A, O>,
2257 expressions::LGammaOp_Context>(b, rc); }
2258 template<
class A,
template<
typename,
typename>
class O>
2259 inline expressions::Expression<RealContext, expressions::Expression<RealContext, A, O>,
2260 expressions::PowerCOp_Context<signed long>::impl>
power(
const expressions::Expression<RealContext, A, O> & a,
2261 signed long b,
const RealContext & rc)
2262 {
return expressions::Expression<RealContext, expressions::Expression<RealContext, A, O>,
2263 expressions::PowerCOp_Context<signed long>::impl>(a, expressions::PowerCOp_Context<signed long>::impl<RealContext, expressions::Expression<RealContext, A, O> >(b, rc)); }
2264 template<
class A,
template<
typename,
typename>
class O>
2265 inline expressions::Expression<RealContext, expressions::Expression<RealContext, A, O>,
2266 expressions::PowerCOp_Context<unsigned long>::impl>
power(
const expressions::Expression<RealContext, A, O> & a,
2267 unsigned long b,
const RealContext & rc)
2268 {
return expressions::Expression<RealContext, expressions::Expression<RealContext, A, O>,
2269 expressions::PowerCOp_Context<unsigned long>::impl>(a, expressions::PowerCOp_Context<unsigned long>::impl<RealContext, expressions::Expression<RealContext, A, O> >(b, rc)); }
2270 template<
class A,
template<
typename,
typename>
class O>
2271 inline expressions::Expression<RealContext, std::pair<expressions::Expression<RealContext, A, O>,
2272 expressions::Wrapper<IntegerContext> >,
2273 expressions::PowerOp_Context>
power(
const expressions::Expression<RealContext, A, O> & a,
2274 const Integer & b,
const RealContext & rc)
2275 {
return expressions::Expression<RealContext, std::pair<expressions::Expression<RealContext, A, O>,
2276 expressions::Wrapper<IntegerContext> >,
2277 expressions::PowerOp_Context>(std::make_pair(a, expressions::Wrapper<IntegerContext>(b)), rc); }
2278 template<
class A,
template<
typename,
typename>
class O,
class A2,
template<
typename,
typename>
class O2>
2279 inline expressions::Expression<RealContext, std::pair<expressions::Expression<RealContext, A, O>,
2280 expressions::Expression<RealContext, A2, O2> >,
2281 expressions::PowerOp_Context>
power(
const expressions::Expression<RealContext, A, O> & a,
2282 const expressions::Expression<RealContext, A2, O2> & b,
const RealContext & rc)
2283 {
return expressions::Expression<RealContext, std::pair<expressions::Expression<RealContext, A, O>,
2284 expressions::Expression<RealContext, A2, O2> >,
2285 expressions::PowerOp_Context>(std::make_pair(a, b), rc); }
2286 template<
class A,
template<
typename,
typename>
class O>
2287 inline expressions::Expression<RealContext, std::pair<expressions::Expression<RealContext, A, O>,
2288 expressions::Wrapper<RealContext> >,
2289 expressions::PowerOp_Context>
power(
const expressions::Expression<RealContext, A, O> & a,
2290 const arithmetic::Real & b,
const RealContext & rc)
2291 {
return expressions::Expression<RealContext, std::pair<expressions::Expression<RealContext, A, O>,
2292 expressions::Wrapper<RealContext> >,
2293 expressions::PowerOp_Context>(std::make_pair(a, expressions::Wrapper<RealContext>(b)), rc); }
Returns the sum of the operands.
void submul(Integer &r, const Integer &a, const Integer &b)
Multiplies a and b and subtracts the result from r.
expressions::Expression< RealContext, expressions::Wrapper< RealContext >, expressions::ExpOp > exp(const Real &i)
Returns the exponential function evaluated at the given floating point number.
Implementation of raising to a power by a constant exponent.
Integer & operator<<=(Integer &cur, const Integer &i)
Computes the bitwise left shift of cur by i bits, and stores the result in cur.
Integer & operator+=(Integer &cur, const expressions::Expression< IntegerContext, D, expressions::MulOp > &E)
Adds the given multiplication expression to cur.
bool operator<(const Integer &a, const Integer &b)
Compares the current integer with the given one.
expressions::Expression< RealContext, expressions::Wrapper< RealContext >, expressions::ATanOp > atan(const Real &i)
Returns the arctangent of the given floating point number.
Integer & operator%=(Integer &cur, const Integer &i)
Divides cur by the given integer i and stores the remainder in cur.
Returns the tangent of the operand.
expressions::Expression< IntegerContext, expressions::Wrapper< IntegerContext >, expressions::NegOp > operator-(const Integer &a)
Negates the integer.
void shr(Integer &r, const Integer &a, long b)
Shifts a by b bits to the left and stores the result in r.
Returns the logarithm of the absolute value of the Gamma function evaluated of the operand together w...
Returns the tangent of the operand. Uses the context stored in the operator.
Returns the square root of the operand. Uses the context stored in the operator.
Returns the arcus tangent of the operand.
void do_assign(typename Context::Type &x, const Op &op, const Data &data)
Performs the assignment of the expression to x.
Returns the sine of the operand. Uses the context stored in the operator.
expressions::Expression< RealContext, expressions::Wrapper< RealContext >, expressions::TanOp > tan(const Real &i)
Returns the tangent of the given floating point number.
expressions::Expression< RealContext, expressions::Wrapper< RealContext >, expressions::GammaOp > gamma(const Real &i)
Returns the Gamma function evaluated at the given floating point number.
Returns the arcus cosine of the operand.
Returns the negative of the operand.
Returns the sine of the operand.
Integer & operator*=(Integer &cur, const Integer &i)
Multiplies the given integer i with cur.
Integer operator--(Integer &cur, int)
Decrements the integer by one and returns the previous value.
expressions::Expression< IntegerContext, expressions::Wrapper< IntegerContext >, expressions::AbsOp > abs(const Integer &i)
Computes and returns the absolute value of i.
expressions::Expression< IntegerContext, std::pair< expressions::Wrapper< IntegerContext >, expressions::Wrapper< IntegerContext > >, expressions::ShLOp > operator<<(const Integer &a, const Integer &b)
Computes the bitwise left shift of the first integer by the number of bits given by the second intege...
Returns the square root of the operand.
Returns the arcus cosine of the operand. Uses the context stored in the operator. ...
Returns the arcus sine of the operand.
Returns the logarithm to base 2 of the operand.
expressions::Expression< RealContext, std::pair< expressions::Wrapper< RealContext >, expressions::Wrapper< RealContext > >, expressions::ATan2Op > atan2(const Real &y, const Real &x)
Returns the arctangent of , using the signs of x and y to determine the quadrant. ...
bool operator<=(const Integer &a, const Integer &b)
Compares the current integer with the given one.
Integer & operator-=(Integer &cur, const expressions::Expression< IntegerContext, D, expressions::MulOp > &E)
Subtracts the multiplication expression E from cur.
Returns the exponential of the operand. Uses the context stored in the operator.
expressions::Expression< RealContext, expressions::Wrapper< RealContext >, expressions::Log2Op > log2(const Real &i)
Returns the base-2 logarithm evaluated at the given floating point number.
Returns the operand multiplied by 2 to the power of a constant.
void mul(Integer &r, const Integer &a, const Integer &b)
Multiplies a with b and stores the result in r.
void div(Integer &r, const Integer &a, const Integer &b)
Divides a by b and stores the result in r.
Returns the natural logarithm of the operand. Uses the context stored in the operator.
Returns the quotient of the operands.
const Data & data() const
Allows to access the expression's data.
Returns the arcus tangent of the quotient of the operands.
Returns the absolute value of the operand. Uses the context stored in the operator.
expressions::Expression< RealContext, expressions::Wrapper< RealContext >, expressions::LogOp > log(const Real &i)
Returns the natural logarithm evaluated at the given floating point number.
void mod(Integer &r, const Integer &a, const Integer &b)
Takes the remainder of the division of a by b and stores it in r.
void increment(Integer &r, const Integer &a)
Increments a by one and stores the result in r.
bool operator==(const Integer &a, const Integer &b)
Compares the current integer with the given one for equality.
Integer & operator/=(Integer &cur, const Integer &i)
Divides cur by the given integer i.
Returns the cosine of the operand. Uses the context stored in the operator.
Returns the square of the operand. Uses the context stored in the operator.
expressions::Expression< IntegerContext, std::pair< expressions::Wrapper< IntegerContext >, expressions::Wrapper< IntegerContext > >, expressions::MulOp > operator*(const Integer &a, const Integer &b)
Multiplies the two integers and returns the result.
Returns the arcus tangent of the quotient of the operands. Uses the context stored in the operator...
Returns the logarithm of the absolute value of the Gamma function evaluated of the operand together w...
expressions::Expression< IntegerContext, std::pair< expressions::Wrapper< IntegerContext >, expressions::Wrapper< IntegerContext > >, expressions::PowerOp > power(const Integer &a, const Integer &b)
Computes and returns a raised to the power of b.
expressions::Expression< RealContext, expressions::Wrapper< RealContext >, expressions::SinOp > sin(const Real &i)
Returns the sine of the given floating point number.
expressions::Expression< RealContext, expressions::Wrapper< RealContext >, expressions::ASinOp > asin(const Real &i)
Returns the arcsine of the given floating point number.
expressions::Expression< RealContext, expressions::Wrapper< RealContext >, expressions::Log10Op > log10(const Real &i)
Returns the base-10 logarithm evaluated at the given floating point number.
expressions::Expression< RealContext, expressions::Wrapper< RealContext >, expressions::ACosOp > acos(const Real &i)
Returns the arccosine of the given floating point number.
Represents an expression.
Returns the product of the operands.
Represents an arbitrary precision floating point value.
int sign(const Integer &) PLLL_INTERNAL_NOTHROW_POSTFIX_INLINE
Returns the sign of the given integer.
Returns the natural logarithm of the operand.
Returns the logarithm to base 10 of the operand. Uses the context stored in the operator.
Integer operator++(Integer &cur, int)
Increments the integer by one and returns the previous value.
bool operator>(const Integer &a, const Integer &b)
Compares the current integer with the given one.
void shl(Integer &r, const Integer &a, long b)
Shifts a by b bits to the left and stores the result in r.
Returns the Gamma function evaluated of the operand. Uses the context stored in the operator...
expressions::Expression< RealContext, expressions::Wrapper< RealContext >, expressions::CosOp > cos(const Real &i)
Returns the cosine of the given floating point number.
Returns the cosine of the operand.
Returns the logarithm of the absolute value of the Gamma function evaluated of the operand...
Returns the logarithm to base 2 of the operand. Uses the context stored in the operator.
Returns the remainder of the operands.
expressions::Expression< IntegerContext, std::pair< expressions::Wrapper< IntegerContext >, expressions::Wrapper< IntegerContext > >, expressions::ShROp > operator>>(const Integer &a, const Integer &b)
Computes the bitwise right shift of the first integer by the number of bits given by the second integ...
Represents an arithmetic context for arbitrary precision floating point values.
Returns the power of the first operand to the second operand.
Returns the exponential of the operand.
void addmul(Integer &r, const Integer &a, const Integer &b)
Multiplies a and b and adds the result to r.
expressions::Expression< IntegerContext, std::pair< expressions::Wrapper< IntegerContext >, expressions::Wrapper< IntegerContext > >, expressions::ModOp > operator%(const Integer &a, const Integer &b)
Divides the first by the second integer and returns the remainder.
Integer & operator>>=(Integer &cur, const Integer &i)
Computes the bitwise right shift of cur by i bits, and stores the result in cur.
Returns the Gamma function evaluated of the operand.
void add(Integer &r, const Integer &a, const Integer &b)
Adds a and b and stores the result in r.
Returns the logarithm to base 10 of the operand.
Returns the power of the first operand to the second operand. Uses the context stored in the operator...
Implementation of raising to a power by a constant exponent.
expressions::Expression< IntegerContext, expressions::Wrapper< IntegerContext >, expressions::SquareOp > square(const Integer &i)
Computes and returns the square of i.
Returns the logarithm of the absolute value of the Gamma function evaluated of the operand...
void decrement(Integer &r, const Integer &a)
Decrements a by one and stores the result in r.
Returns the absolute value of the operand.
Returns the square of the operand.
Returns the arcus sine of the operand. Uses the context stored in the operator.
expressions::Expression< IntegerContext, std::pair< expressions::Wrapper< IntegerContext >, expressions::Wrapper< IntegerContext > >, expressions::AddOp > operator+(const Integer &a, const Integer &b)
Adds the two integers and returns the result.
expressions::Expression< IntegerContext, std::pair< expressions::Wrapper< IntegerContext >, expressions::Wrapper< IntegerContext > >, expressions::DivOp > operator/(const Integer &a, const Integer &b)
Divides the first by the second integer and returns the result.
Represents an arbitrary precision integer.
expressions::Expression< RealContext, expressions::Wrapper< RealContext >, expressions::SqrtOp > sqrt(const Real &i)
Returns the square root of the given floating point number.
Returns the first operand divided by 2 to the power of the second operand.
expressions::Expression< RealContext, expressions::Wrapper< RealContext >, expressions::LGammaOp > lgamma(const Real &i)
Returns the natural logarithm of the absolute value of the Gamma function evaluated at the given floa...
Returns the arcus tangent of the operand. Uses the context stored in the operator.
bool operator!=(const Integer &a, const Integer &b)
Compares the current integer with the given one for inequality.
Wraps a variable to behave similarly to an Expression<> object.
Returns the difference of the operands.
bool operator>=(const Integer &a, const Integer &b)
Compares the current integer with the given one.
Returns the first operand multiplied by 2 to the power of the second operand.
void sub(Integer &r, const Integer &a, const Integer &b)
Subtracts b from a and stores the result in r.