역삼각함수란 삼각함수의 역함수를 의미하고,
역쌍곡선함수란 쌍곡선함수의 역함수를 의미한다.
수학에서 sin 함수의 역함수는 arcsin 으로 표기되는데, Haskell 언어에서는 asin 함수로 구현되어 있다.
또한 Haskell 언어에서는 쌍곡선함수 sinh, cosh 의 역함수들이 각각 asinh, acosh 라는 이름으로 이미 구현되어 있다. 그래서 비교를 위해 아래의 소스에 arcsinh, arccosh 라는 이름의 함수로 구현해 보았다.
영문 위키피디아의 GHC 설명: http://en.wikipedia.org/wiki/Glasgow_Haskell_Compiler
(참고. Haskell 언어는 대소 문자를 구분하며 타입에 엄격한 언어이다. )
아래의 소스는 Glasgow Haskell Compiler ghc 로 컴파일되는 소스이다.
Filename: testArcSine.hs
Compile: ghc testArcSine.hs
Execute: ./testArcSine
Date: 2013. 1. 3.
Copyright (c) pkim _AT_ scripts.pe.kr
-}
module Main where
import System.Environment
import Text.Printf
arcsinh :: (RealFloat a) => a -> a
arcsinh x = w where
w = log (x + sqrt (x*x + 1))
arccosh :: (RealFloat a) => a -> a
arccosh x = w where
w = log (x + sqrt (x*x - 1))
main :: IO ()
main = do
let x = -0.9 :: Double
let y = asin x
printf "y = asin(%f) = %.9f\n" x y
printf "sin(y) = sin(%.9f) = %f\n" y (sin y)
printf "\n"
let x =1.1 :: Double
let u = acosh x
printf "u = acosh(%.1f) = %.10f\n" x u
let v = asinh x
printf "v = asinh(%.1f) = %.10f\n" x v
printf "cosh(u) = cosh(%.10f) = %3.1g\n" u (cosh u)
printf "sinh(v) = sinh(%.10f) = %3.1g\n" v (sinh v)
printf "\n"
printf "arccosh(%.1f) = %.10f\n" x (arccosh x)
printf "arcsinh(%.1f) = %.10f\n" x (arcsinh x)
{-
Output:
y = asin(-0.9) = -1.119769515
sin(y) = sin(-1.119769515) = -0.9
u = acosh(1.1) = 0.4435682544
v = asinh(1.1) = 0.9503469298
cosh(u) = cosh(0.4435682544) = 1.1
sinh(v) = sinh(0.9503469298) = 1.1
arccosh(1.1) = 0.4435682544
arcsinh(1.1) = 0.9503469298
-}
'프로그래밍 > Haskell' 카테고리의 다른 글
이진 파일을 읽어서 16진수로 보여주는 HexView 소스 with Haskell (0) | 2013.08.20 |
---|---|
Haskell 언어로 행렬 곱셈하는 예제 (0) | 2012.05.28 |
Haskell 언어로 복소수 계산과 분수 계산 쉽게 하기 (0) | 2012.05.27 |
이차방정식 풀이 with Haskell (0) | 2012.05.23 |
30000! 빨리 계산하기 with Haskell (0) | 2010.07.20 |