Ramanujan's constant: Difference between revisions

Content added Content deleted
(Initial Haskell version.)
Line 111: Line 111:
67: 147197952743.99999866245422450682926131257863 ≈ 147197952744 (diff: 0.00000133754577549317073868742137)
67: 147197952743.99999866245422450682926131257863 ≈ 147197952744 (diff: 0.00000133754577549317073868742137)
163: 262537412640768743.99999999999925007259719818568888 ≈ 262537412640768744 (diff: 0.00000000000074992740280181431112)
163: 262537412640768743.99999999999925007259719818568888 ≈ 262537412640768744 (diff: 0.00000000000074992740280181431112)
</pre>

=={{header|Haskell}}==
<lang haskell>import Control.Monad (forM_)
import Data.Number.CReal (CReal, showCReal)
import Text.Printf (printf)

ramfun :: CReal -> CReal
ramfun x = exp (pi * sqrt x)

-- Ramanujan's constant.
ramanujan :: CReal
ramanujan = ramfun 163

-- The last four Heegner numbers.
heegners :: [Int]
heegners = [19, 43, 67, 163]

-- The absolute distance to the nearest integer.
intDist :: CReal -> CReal
intDist x = abs (x - fromIntegral (round x))

main :: IO ()
main = do
let n = 35
printf "Ramanujan's constant: %s\n\n" (showCReal n ramanujan)
printf "%3s %34s%20s%s\n\n" " h " "e^(pi*sqrt(h))" "" " Dist. to integer"
forM_ heegners $ \h ->
let r = ramfun (fromIntegral h)
d = intDist r
in printf "%3d %54s %s\n" h (showCReal n r) (showCReal 15 d)</lang>

{{out}}
<pre>
Ramanujan's constant: 262537412640768743.99999999999925007259719818568887935

h e^(pi*sqrt(h)) Dist. to integer

19 885479.77768015431949753789348171962682071 0.222319845680502
43 884736743.99977746603490666193746207858537685 0.000222533965093
67 147197952743.99999866245422450682926131257862851 0.000001337545775
163 262537412640768743.99999999999925007259719818568887935 0.00000000000075
</pre>
</pre>