功能给出的答案与预期略有不同

时间:2013-10-20 16:35:07

标签: haskell monads

我在Haskell做了一些monad的东西,我写了一个函数,根据游戏的决策树计算赢得赌博游戏的概率。它的作用就像一个魅力,除了它有时会返回比预期更轻微的答案。例如,我将我的代码上传到DOMjudge并返回错误,说正确的答案应该是1%6而不是6004799503160661%36028797018963968,这是我的函数返回的。如果你真的进行分工他们几乎都是一样的,但我不明白为什么我的答案仍然略有不同。我一直在搞乱不同的类型(例如使用Real而不是Int),但到目前为止还没有运气。我对这些东西不熟悉,我似乎无法弄清楚这一点。有人能指出我正确的方向吗?

- 已删除代码 -

1 个答案:

答案 0 :(得分:4)

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

尝试这样的事情

import Data.Ratio

probabilityOfWinning tree = countWins tree % countGames tree

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

相关问题