gpt4 book ai didi

haskell - 如何摆脱 SBV 中 -0.0 的解

转载 作者:行者123 更新时间:2023-12-02 14:40:48 25 4
gpt4 key购买 nike

以下代码(使用 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,因为当 z10.0 时也是如此。

最佳答案

[在 Hackage ( http://hackage.haskell.org/package/sbv ) 上发布 SBV 4.4 后更新,提供了适当的支持。]

假设您的 SBV >= 4.4,您现在可以执行以下操作:

Prelude Data.SBV> allSat $ \z -> z .== (0::SDouble)
Solution #1:
s0 = 0.0 :: Double
Solution #2:
s0 = -0.0 :: Double
Found 2 different solutions.
Prelude Data.SBV> allSat $ \z -> z .== (0::SDouble) &&& bnot (isNegativeZeroFP z)
Solution #1:
s0 = 0.0 :: Double
This is the only solution.

关于haskell - 如何摆脱 SBV 中 -0.0 的解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29283304/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com