CalcProbs.hs 792 B

1234567891011121314151617181920212223
  1. {-- ======================================================================== -}
  2. module CalcProbs where
  3. {-Probability for all successes.-}
  4. calcProbAll :: (Integral a, Fractional b) => a -> a -> a -> b
  5. calcProbAll pool wins sides
  6. | pool < 1 || wins < 1 || sides < 1 = 0
  7. | sides == 1 = 1
  8. | otherwise =
  9. ((fromIntegral wins / fromIntegral sides)^pool)
  10. {-Probability for at least one success.-}
  11. calcProbOne :: (Integral a, Fractional b) => a -> a -> a -> b
  12. calcProbOne pool wins sides
  13. | pool < 1 || wins < 1 || sides < 1 = 0
  14. | sides == 1 = 1
  15. | pool > 20 = calcProbOne (20) wins sides --For now, avoid edge cases.
  16. | otherwise =
  17. (fromIntegral wins / fromIntegral sides)
  18. + ((calcProbOne (pool - 1) wins sides)
  19. * (1 - (fromIntegral wins / fromIntegral sides)))