開発環境
- OS X Mavericks - Apple(OS)
- BBEdit - Bare Bones Software, Inc., Emacs (Text Editor)
- Haskell (純粋関数型プログラミング言語)
- GHC (The Glasgow Haskell Compiler) (処理系)
- The Haskell Platform (インストール方法、モジュール等)
C実践プログラミング 第3版 (Steve Oualline (著)、 望月 康司 (監訳) (翻訳)、谷口 功 (翻訳)、オライリー・ジャパン)のⅡ部(単純なプログラミング)の16章(浮動小数点数)、16.12(プログラミング実習)、実習 16-2をHaskellで解いてみる。
その他参考書籍
- プログラミングHaskell (オーム社) Graham Hutton(著) 山本 和彦(翻訳)
- Real World Haskell―実戦で学ぶ関数型言語プログラミング (オライリージャパン) Bryan O'Sullivan John Goerzen Don Stewart(著) 山下 伸夫 伊東 勝利 株式会社タイムインターメディア(翻訳)
実習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 コメント:
コメントを投稿