다음은  이차방정식 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


  1. (*
  2.  *  Filename: TestGoldenRatio.fs
  3.  *    황금률(즉, 이차방정식 x^2 - x - 1  = 0 의 양의 근)을 계산한다.
  4.  *
  5.  *   Compile: fsc testGoldenRatio.fs
  6.  *   Execute: testGoldenRatio
  7.  *
  8.  *      Date:  2010/07/13
  9.  *    Author: PH Kim   [ pkim (AT) scripts.pe.kr ]
  10.  *)
  11. #light
  12. exception RuntimeError of string
  13. let printUsing =
  14.     printfn "Using: TestGoldenRatio [-h|-help]"
  15.     printfn "This calculates the value of the golden ratio."
  16. // 이차방정식 a x^2 + b x + c  = 0 의 근을 구한다.
  17. let findQuadraticRoot (a : float,  b : float, c : float) =
  18.     if a = 0.0 then
  19.         raise (RuntimeError "Since the highest coefficient is zero, the given equation is not a quadratic equation.")
  20.     elif (b*b - 4.0*a*c < 0.0) then
  21.         raise (RuntimeError ("Since the discriminant " + (sprintf "%O" (b*b - 4.0*a*c)) + " is negative, the given equation has no real root."))
  22.     let x1 = (-b + (sqrt (b*b - 4.0*a*c))) / (2.0 * a)
  23.     let x2 = (-b - (sqrt (b*b - 4.0*a*c))) / (2.0 * a)
  24.     x1, x2
  25. // 실행 시작 지점
  26. let cmdArgs = System.Environment.GetCommandLineArgs()
  27. if (Array.length cmdArgs > 1) && (cmdArgs.[1] = "-h" || cmdArgs.[1] = "-help") then
  28.     printUsing; exit(1)
  29. let x1, x2 = findQuadraticRoot (1.0 , -1.0 , -1.0)
  30. if x1 >= x2 then
  31.     printfn "The bigger root is %O, " x1
  32.     printfn "and the less root is %O." x2
  33. else
  34.     printfn "The bigger root is %O, " x2
  35.     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.



Posted by Scripter
,