// emphasizes efficiency. However, if the integer is small enough
// we save space and dereferences by using an immediate type.
// (C.f. <cln/object.h>)
- if (i < (1U << (cl_value_len-1)))
+ if (i < (1UL << (cl_value_len-1)))
value = cln::cl_I(i);
else
value = cln::cl_I(static_cast<unsigned long>(i));
const numeric &o = ex_to<numeric>(other);
if (this->is_equal(o) || this->is_equal(-o))
return true;
- if (o.imag().is_zero()) // e.g. scan for 3 in -3*I
- return (this->real().is_equal(o) || this->imag().is_equal(o) ||
- this->real().is_equal(-o) || this->imag().is_equal(-o));
+ if (o.imag().is_zero()) { // e.g. scan for 3 in -3*I
+ if (!this->real().is_equal(*_num0_p))
+ if (this->real().is_equal(o) || this->real().is_equal(-o))
+ return true;
+ if (!this->imag().is_equal(*_num0_p))
+ if (this->imag().is_equal(o) || this->imag().is_equal(-o))
+ return true;
+ return false;
+ }
else {
if (o.is_equal(I)) // e.g scan for I in 42*I
return !this->is_real();
if (o.real().is_zero()) // e.g. scan for 2*I in 2*I+1
- return (this->real().has(o*I) || this->imag().has(o*I) ||
- this->real().has(-o*I) || this->imag().has(-o*I));
+ if (!this->imag().is_equal(*_num0_p))
+ if (this->imag().is_equal(o*I) || this->imag().is_equal(-o*I))
+ return true;
}
return false;
}
results.reserve(n/2);
for (unsigned p=next_r; p<=n; p+=2) {
cln::cl_I c = 1; // seed for binonmial coefficients
- cln::cl_RA b = cln::cl_RA(1-p)/2;
+ cln::cl_RA b = cln::cl_RA(p-1)/-2;
const unsigned p3 = p+3;
const unsigned pm = p-2;
unsigned i, k, p_2;