Следующий код (с использованием 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