역삼각함수란 삼각함수의 역함수를 의미하고,

역쌍곡선함수란 쌍곡선함수의 역함수를 의미한다.

수학에서 sin 함수의 역함수는 arcsin 으로 표기되는데,

FreeBASIC 언어에서는 asin 함수로 구현되어 있다.

아래의 소스는 FreeBASIC 의 (명령줄 컴파일 명령) fbc 로 컴파일되는 소스이다.

참고 1. FreeBASIC 은 이전(MS-DOS 시절)에 쓰던 Quick BASIC 과 유사하며, Quick BASIC을 발전시킨 것이라고 보변 된다. 아래는 Wikipedia 에서 적어 놓은 FreeBASIC 의 설명이다.

---------------------------------------------------

FreeBASIC is a free/open source (GPL), 32-bit BASIC compiler[2] for Microsoft Windows, protected-mode DOS (DOS extender), Linux, FreeBSD and Xbox.

---------------------------------------------------

 

참고 2.  Double 타입의 부동소수점수를 원하는 위치에서 적당히 반올림하여 출력하기 위해서는 Format 또는 Format$ 함수를 써야 하는데, 이를 위해서는 FreeBASIC 언어에서는 소스에

#include "string.bi"

를 추가해야 한다.

(참고로, FreeBASIC 언어에서는 Print Using 과 "#.#########" 포맷을 이용해서 Double 타입을 출력하면, 근사값이라는 의미로 수치 앞에 퍼센트 기호(%)가 붙는다.)

 

참고 3.  제곱근을 구하기 위해 C, Java, Ruby, Python 언어에서는 sqrt 함수를 사용하고, Visual BASIC, C# 언어에서는 Sqrt 함수를 사용하지만, FreeVASIC 언어에서는 Quick BASIC 언어에서 처럼 Sqr 로 구현되어 있다. (Sqrt 가 아니라 마지막 분자 t 가 빠진 Sqr 임에 주의한다.)

 

참고 4.  FreeBASIC 언어에는 쌍곡선 함수가 구현되어 있지 않아 아래의 소스에 FreeBASIC 지수함수 Exp 를 이용하여 쌍곡ㅅ선 함수  sinh 함수와 cosh 함수를 구현헤 놓았다. 

 

REM =============================================================
REM Filename: testArcSine.bas
REM
REM    This source should be compiled by using FreeBASIC,
REM    which can be downloaded from http://www.freebasic.net
REM
REM Compile: fbc testArcSine.bas
REM Execute: testArcSine
REM
REM Date: 2013. 1. 2.
REM Copyright (c) pkim _AT_ scripts.pe.kr
REM =============================================================

#include "string.bi"

Function asinh(x As Double) As Double
        Dim y As Double = log(x + Sqr(x*x + 1))
        return y
End Function

Function cosh(x As Double) As Double
        Dim y As Double = (Exp(x) + Exp(-x))/2.0
        return y
End Function

Function sinh(x As Double) As Double
        Dim y As Double = (Exp(x) - Exp(-x))/2.0
        return y
End Function

Function acosh(x As Double) As Double
        Dim y As Double = log(x + Sqr(x*x - 1))
        return y
End Function


Sub Main()
        Dim x As Double = -0.9
        Dim y As Double = asin(x)
        ' Print Using "y = asin(" & x & ") = #"; y
        ' Print Using "y = asin(" & x & ") = #.#########"; y
        Print "y = asin(" & x & ") = "& Format$(y, "0.#########")
        ' Print "sin(y) = sin(" & y & ") = " & sin(y)
        ' Print Using "sin(y) = sin(#.########) = #"; y, sin(y)
        Print "sin(y) = sin(" & Format$(y, "0.#########") & ") = " & sin(y)
        Print

        x = 1.1
        Dim u As Double = acosh(x)
        ' Print "u = acosh(" & x & ") = " & u
        Print "u = acosh(" & x & ") = " & Format$(u, "0.#########")

        Dim v As Double = asinh(x)
        ' Print "v = asinh(" & x & ") = " & v
        Print "v = asinh(" & x & ") = " &  Format$(v, "0.##########")

        ' Print "cosh(u) = cosh(" & u & ") = " & Cosh(u)
        ' Print "sinh(v) = sinh(" & v & ") = " & Sinh(v)
        Print "cosh(u) = cosh(" & Format$(u, "0.#########") & ") = " & Cosh(u)
        Print "sinh(v) = sinh(" & Format$(v, "0.#########") & ") = " & Sinh(v)
           
        ' Print Format$(1.23, "#.#")
End Sub


Main()

' ---------------------------
' 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
' ---------------------------

 

 

 

Posted by Scripter
,