The definiton of the conversion function from signed bit-vectors to floats is this:
```
o ((_ to_fp eb sb) RoundingMode (_ BitVec m) (_ FloatingPoint eb sb))
Let b in [[(_ BitVec m)]] and let n be the signed integer represented by b
(in 2's complement format).
[[(_ to_fp eb sb)]](r, b) = +/-infinity if n is too large/too small to be
represented as a finite number of [[(_ FloatingPoint eb sb)]];
[[(_ to_fp eb sb)]](r, x) = y otherwise, where y is the finite number
such that [[fp.to_real]](y) is closest to n according to rounding mode r.
```
And `QF_FP/schanda/spark/zeros_consistent_4.smt2` is thusly:
```
(set-logic QF_FP)
(set-info :source |SPARK inspired floating point problems by Florian Schanda|)
(set-info :category "crafted")
(set-info :status unsat)
(declare-fun rm1 () RoundingMode)
(define-fun a () Float32 ((_ to_fp 8 24) rm1 (_ bv0 32)))
(assert (not (fp.isPositive a)))
(check-sat)
(exit)
```
This benchmark is tagged as unsat, but if the rounding mode is to-negative, shouldn't the float conversion return a -zero?
Z3 has been saying +zero for all rounding modes for a long time, so I'm sure there was a reason, I just can't remember it :-)
Thanks,
Christoph