mirror of
https://github.com/Z3Prover/z3
synced 2025-04-15 13:28:47 +00:00
MPF conversion bugfix.
Signed-off-by: Christoph M. Wintersteiger <cwinter@microsoft.com>
This commit is contained in:
parent
1a26c9726b
commit
76c59cb85c
|
@ -83,17 +83,21 @@ br_status float_rewriter::mk_to_float(func_decl * f, unsigned num_args, expr * c
|
||||||
rational q;
|
rational q;
|
||||||
mpf q_mpf;
|
mpf q_mpf;
|
||||||
if (m_util.au().is_numeral(args[1], q)) {
|
if (m_util.au().is_numeral(args[1], q)) {
|
||||||
|
TRACE("fp_rewriter", tout << "q: " << q << std::endl; );
|
||||||
mpf v;
|
mpf v;
|
||||||
m_util.fm().set(v, ebits, sbits, rm, q.to_mpq());
|
m_util.fm().set(v, ebits, sbits, rm, q.to_mpq());
|
||||||
result = m_util.mk_value(v);
|
result = m_util.mk_value(v);
|
||||||
m_util.fm().del(v);
|
m_util.fm().del(v);
|
||||||
|
TRACE("fp_rewriter", tout << "result: " << result << std::endl; );
|
||||||
return BR_DONE;
|
return BR_DONE;
|
||||||
}
|
}
|
||||||
else if (m_util.is_value(args[1], q_mpf)) {
|
else if (m_util.is_value(args[1], q_mpf)) {
|
||||||
|
TRACE("fp_rewriter", tout << "q: " << m_util.fm().to_string(q_mpf) << std::endl; );
|
||||||
mpf v;
|
mpf v;
|
||||||
m_util.fm().set(v, ebits, sbits, rm, q_mpf);
|
m_util.fm().set(v, ebits, sbits, rm, q_mpf);
|
||||||
result = m_util.mk_value(v);
|
result = m_util.mk_value(v);
|
||||||
m_util.fm().del(v);
|
m_util.fm().del(v);
|
||||||
|
TRACE("fp_rewriter", tout << "result: " << result << std::endl; );
|
||||||
return BR_DONE;
|
return BR_DONE;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -117,11 +121,11 @@ br_status float_rewriter::mk_to_float(func_decl * f, unsigned num_args, expr * c
|
||||||
return BR_FAILED;
|
return BR_FAILED;
|
||||||
|
|
||||||
TRACE("fp_rewriter", tout << "q: " << q << ", e: " << e << "\n";);
|
TRACE("fp_rewriter", tout << "q: " << q << ", e: " << e << "\n";);
|
||||||
|
|
||||||
mpf v;
|
mpf v;
|
||||||
m_util.fm().set(v, ebits, sbits, rm, q.to_mpq(), e.to_mpq().numerator());
|
m_util.fm().set(v, ebits, sbits, rm, q.to_mpq(), e.to_mpq().numerator());
|
||||||
result = m_util.mk_value(v);
|
result = m_util.mk_value(v);
|
||||||
m_util.fm().del(v);
|
m_util.fm().del(v);
|
||||||
|
TRACE("fp_rewriter", tout << "result: " << result << std::endl; );
|
||||||
return BR_DONE;
|
return BR_DONE;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|
|
@ -367,7 +367,7 @@ void mpf_manager::set(mpf & o, unsigned ebits, unsigned sbits, mpf_rounding_mode
|
||||||
o.ebits = ebits;
|
o.ebits = ebits;
|
||||||
o.sbits = sbits;
|
o.sbits = sbits;
|
||||||
|
|
||||||
signed ds = sbits - x.sbits + 4; // plus rounding bits
|
signed ds = sbits - x.sbits + 3; // plus rounding bits
|
||||||
if (ds > 0)
|
if (ds > 0)
|
||||||
{
|
{
|
||||||
m_mpz_manager.mul2k(o.significand, ds);
|
m_mpz_manager.mul2k(o.significand, ds);
|
||||||
|
|
Loading…
Reference in a new issue