2013年12月14日土曜日

開発環境

C実践プログラミング 第3版 (Steve Oualline (著)、 望月 康司 (監訳) (翻訳)、谷口 功 (翻訳)、オライリー・ジャパン)のⅡ部(単純なプログラミング)の16章(浮動小数点数)、16.12(プログラミング実習)、実習 16-2をHaskellで解いてみる。

その他参考書籍

実習16-2.

コード(BBEdit)

Sample.hs

{-# OPTIONS -Wall -Werror #-}

main :: IO ()
main = mapM_ putStrLn $
             map (\x -> "浮動小数点数: " ++ show x ++ "\n小数点の右の桁数" ++
                        show l ++ "の固定小数点数: " ++
                        (show $ toFixedDouble x l))
                 nums

l :: Int
l = 2

toFixedDouble :: Double -> Int -> Double
toFixedDouble a n =
    let pm = if a < 0 then -1.0 else 1.0
        b = (floor $ (abs a) * (10 ^ (n + 1)) :: Int)
        m = mod b 10
        c = fromIntegral $ div b 10
    in if m >= 5 then
           pm * (c + 1.0) / (10 ^ n)
       else
           pm * c / (10 ^ n)

nums :: [Double]
nums = [1.2345, 1.2354, 12.3446, 12.3456, -1.2345, -1.2354, -12.3446, -12.3456]

入出力結果(Terminal, runghc)

$ runghc Sample.hs
浮動小数点数: 1.2345
小数点の右の桁数2の固定小数点数: 1.23
浮動小数点数: 1.2354
小数点の右の桁数2の固定小数点数: 1.24
浮動小数点数: 12.3446
小数点の右の桁数2の固定小数点数: 12.34
浮動小数点数: 12.3456
小数点の右の桁数2の固定小数点数: 12.35
浮動小数点数: -1.2345
小数点の右の桁数2の固定小数点数: -1.23
浮動小数点数: -1.2354
小数点の右の桁数2の固定小数点数: -1.24
浮動小数点数: -12.3446
小数点の右の桁数2の固定小数点数: -12.34
浮動小数点数: -12.3456
小数点の右の桁数2の固定小数点数: -12.35
$

慣れるまでは{-# OPTIONS -Wall -Werror #-}の記述を消さずに細かく型を指定していくことに。

0 コメント:

コメントを投稿