LINUX.ORG.RU

История изменений

Исправление quasimoto, (текущая версия) :

По мелочи:

import System.Random
import Data.List

randomNorm :: IO Double
randomNorm = do
  u <- randomIO
  v <- randomIO
  return $! sqrt (-2 * log u) * cos (2 * pi * v)
  --     ^ rnf (x :: Double) = x `seq` ()

sum' :: Num a => [a] -> a
sum' = foldl' (+) 0

reverseReplicateM :: Monad m => Int -> m a -> m [a]
-- ^
-- > reverseReplicateM 2 getLine
-- 1
-- 2
-- ["2","1"]
reverseReplicateM n_ e = go n_ [] where
  go n a = if n <= 0 then return a else e >>= go (n - 1) . (: a)

main :: IO ()
main = print =<< sum' `fmap` reverseReplicateM 1000000 randomNorm

Исправление quasimoto, :

По мелочи:

import System.Random
import Data.List

randomNorm :: IO Double
randomNorm = do
  u <- randomIO
  v <- randomIO
  return $! sqrt (-2 * log u) * cos (2 * pi * v)
  --     ^ rnf (x :: Double) = x `seq` ()

sum' :: Num a => [a] -> a
sum' = foldl' (+) 0

reverseReplicateM :: Monad m => Int -> m a -> m [a]
-- ^
-- > reverseReplicateM 2 getLine
-- 1
-- 2
-- ["2","1"]
reverseReplicateM n_ e = go n_ [] where
  go n a = if n <= 0 then return a else e >>= \x -> go (n - 1) (x : a)

main :: IO ()
main = print =<< sum' `fmap` reverseReplicateM 1000000 randomNorm

Исходная версия quasimoto, :

По мелочи:

import System.Random
import Data.List

randomNorm :: IO Double
randomNorm = do
  u <- randomIO
  v <- randomIO
  return $! sqrt (-2 * log u) * cos (2 * pi * v)
  --     ^ rnf (x :: Double) = x `seq` ()

sum' :: Num a => [a] -> a
sum' = foldl' (+) 0

reverseReplicateM :: Monad m => Int -> m a -> m [a]
-- ^
-- > reverseReplicateM 2 getLine
-- 1
-- 2
-- ["2","1"]
reverseReplicateM n_ e = go n_ [] where
  go n a = if n == 0 then return a else e >>= \x -> go (n - 1) (x : a)

main :: IO ()
main = print =<< sum' `fmap` reverseReplicateM 1000000 randomNorm