다음은 이차방정식 x^2 - x - 1 = 0 의 양의 근 즉 황금비율(golden ratio)을 구하는 F# 소스이다. 황금비율을 구하는 비례방정식은 1 : x = x : (x+1) 이며, 이를 이차방정식으로 표현한 것이 x^2 - x - 1 = 0 이다.
See: http://en.wikipedia.org/wiki/Golden_ratio
- (*
- * Filename: TestGoldenRatio.fs
- * 황금률(즉, 이차방정식 x^2 - x - 1 = 0 의 양의 근)을 계산한다.
- *
- * Compile: fsc testGoldenRatio.fs
- * Execute: testGoldenRatio
- *
- * Date: 2010/07/13
- * Author: PH Kim [ pkim (AT) scripts.pe.kr ]
- *)
- #light
- exception RuntimeError of string
- let printUsing =
- printfn "Using: TestGoldenRatio [-h|-help]"
- printfn "This calculates the value of the golden ratio."
- // 이차방정식 a x^2 + b x + c = 0 의 근을 구한다.
- let findQuadraticRoot (a : float, b : float, c : float) =
- if a = 0.0 then
- raise (RuntimeError "Since the highest coefficient is zero, the given equation is not a quadratic equation.")
- elif (b*b - 4.0*a*c < 0.0) then
- raise (RuntimeError ("Since the discriminant " + (sprintf "%O" (b*b - 4.0*a*c)) + " is negative, the given equation has no real root."))
- let x1 = (-b + (sqrt (b*b - 4.0*a*c))) / (2.0 * a)
- let x2 = (-b - (sqrt (b*b - 4.0*a*c))) / (2.0 * a)
- x1, x2
- // 실행 시작 지점
- let cmdArgs = System.Environment.GetCommandLineArgs()
- if (Array.length cmdArgs > 1) && (cmdArgs.[1] = "-h" || cmdArgs.[1] = "-help") then
- printUsing; exit(1)
- let x1, x2 = findQuadraticRoot (1.0 , -1.0 , -1.0)
- if x1 >= x2 then
- printfn "The bigger root is %O, " x1
- printfn "and the less root is %O." x2
- else
- printfn "The bigger root is %O, " x2
- printfn "and the less root is %O." x1
컴파일> fsc TestGoldenRatio.fs
실행>TestGoldenRatio
The bigger root is 1.61803398874989,
and the less root is -0.618033988749895.
'프로그래밍 > F#' 카테고리의 다른 글
진법(radix) 표 만들기 예제 with F# (0) | 2010.07.15 |
---|---|
대화형 모드의 진법(radix) 변환 예제 with F# (0) | 2010.07.14 |
현재 시각 알아내기 for F# (0) | 2010.07.13 |
80컬럼 컨솔에 19단표 출력하기 예제 for F# (0) | 2010.07.13 |
(최대공약수 구하기) while 반복문 없는 예제 for F# (0) | 2010.07.13 |