2

我在 Haskell 中做一些 monad 的东西,我写了一个函数来计算在给定游戏决策树的情况下赢得赌博游戏的概率。它就像一个魅力,除了它有时会返回与预期略有不同的答案。例如,我将我的代码上传到 DOMjudge,它返回一个错误,说正确的答案应该是 1 % 6 而不是 6004799503160661 % 36028797018963968,这是我的函数返回的内容。如果您实际上进行除法,它们几乎相同,但是我不明白为什么我的答案仍然略有不同。我一直在搞乱不同的类型(例如使用 Real 而不是 Int),但到目前为止还没有运气。我对这些东西有点陌生,我似乎无法弄清楚。谁能指出我正确的方向?

-代码已删除-

4

1 回答 1

4

由于probabilityOfWinning. 你有正确的解决方案来避免它——使用type Rational = Ratio Integer——但是你在游戏中应用它太晚了。通过toRational在除法之后进行转换,您在转换为之前已经失去了精度Rational

尝试这样的事情

import Data.Ratio

probabilityOfWinning tree = countWins tree % countGames tree

然后从and中删除Real类型限制,以便它们返回整数而不是浮点数。这些一起将确保您始终使用无限精度数学而不是浮点数。countWinscountGames

于 2013-10-20T16:43:26.627 回答