mirror of
https://github.com/Z3Prover/z3
synced 2025-04-07 18:05:21 +00:00
fix multiplier base for #5022
add also some C++ API shorthands for retrieving numerals
This commit is contained in:
parent
d0c96abe30
commit
c808f74591
|
@ -825,6 +825,11 @@ namespace z3 {
|
|||
bool is_numeral(double& d) const { if (!is_numeral()) return false; d = Z3_get_numeral_double(ctx(), m_ast); check_error(); return true; }
|
||||
bool as_binary(std::string& s) const { if (!is_numeral()) return false; s = Z3_get_numeral_binary_string(ctx(), m_ast); check_error(); return true; }
|
||||
|
||||
double as_double() const { double d = 0; is_numeral(d); return d; }
|
||||
uint64_t as_uint64() const { uint64_t r = 0; is_numeral_u64(r); return r; }
|
||||
uint64_t as_int64() const { int64_t r = 0; is_numeral_i64(r); return r; }
|
||||
|
||||
|
||||
/**
|
||||
\brief Return true if this expression is an application.
|
||||
*/
|
||||
|
|
|
@ -1682,9 +1682,9 @@ double mpz_manager<SYNCH>::get_double(mpz const & a) const {
|
|||
for (unsigned i = 0; i < sz; i++) {
|
||||
r += d * static_cast<double>(digits(a)[i]);
|
||||
if (sizeof(digit_t) == sizeof(uint64_t))
|
||||
d *= static_cast<double>(UINT64_MAX); // 64-bit version
|
||||
d *= (1.0 + static_cast<double>(UINT64_MAX)); // 64-bit version, multiply by 2^64
|
||||
else
|
||||
d *= static_cast<double>(UINT_MAX); // 32-bit version
|
||||
d *= (1.0 + static_cast<double>(UINT_MAX)); // 32-bit version, multiply by 2^32
|
||||
}
|
||||
if (!(r >= 0.0)) {
|
||||
r = static_cast<double>(UINT64_MAX); // some large number
|
||||
|
|
Loading…
Reference in a new issue