【发布时间】:2015-03-26 16:01:29
【问题描述】:
以下代码(使用 SBV):
{-# LANGUAGE ScopedTypeVariables #-}
import Data.SBV
main :: IO ()
main = do
res <- allSat zeros
putStrLn $ show res
zeros :: Predicate
zeros = do
z1 <- sDouble "Z1"
constrain $ z1 .== 0.0
return true
生成两种解决方案:
Solution #1:
Z1 = 0.0 :: SDouble
Solution #2:
Z1 = -0.0 :: SDouble
Found 2 different solutions.
如何消除无趣的-0.0 解决方案?我不能使用z1 ./= -0.0,因为当z1 是0.0 时也是如此。
【问题讨论】:
-
要识别 x=-0,您可以执行 x==0 && (1/x)
-
好问题。我的第一反应是
signum (-0.0)(不,返回零)和isNegativeZero(不,没有SDouble的实例)。 -
正如@augustss 所说,翻译成SBV:
(x .== 0) &&& ((1 / x) .< 0) -
不幸的是,添加 ` (1/x)