Следният код (с помощта на 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
.
signum (-0.0)
(не, връща нула) иisNegativeZero
(не, няма екземпляр заSDouble
). - person Thomas M. DuBuisson   schedule 26.03.2015(x .== 0) &&& ((1 / x) .< 0)
- person Thomas M. DuBuisson   schedule 26.03.2015