다음은  이차방정식 x^2 - x - 1 = 0 의 양의 근 즉 황금비율(golden ratio)을 구하는 Go 애플리케이션 소스이다. 황금비율을 구하는 비례방정식은 1 : x = x : (x+1) 이며, 이를 이차방정식으로 표현한 것이 x^2 - x - 1 = 0 이다.

See:  Golden ratio - Sajun.org

* Go 프로그램 소스는 (한글이 주석에만 포함되어 있더러도) UTF-8 인코딩으로 저장해야 한다.

  1. /*
  2.  *  Filename: testGoldenRatio.go
  3.  *    황금률(즉, 이차방정식 x^2 - x - 1  = 0 의 양의 근)을 계산한다.
  4.  *
  5.  *   Execute: go run testGoldenRatio.go
  6.  *
  7.  *   or
  8.  *
  9.  *   Compile: go build testGoldenRatio.go
  10.  *   Execute: ./testGoldenRatio
  11.  *
  12.  *      Date:  2012/06/20
  13.  *    Author:  PH Kim   [ pkim (AT) scripts.pe.kr ]
  14.  */
  15. package main
  16. import (
  17.     "fmt"
  18.     "os"
  19.     "math"
  20. )
  21. type PAIR struct {
  22.     x1 float64
  23.     x2 float64
  24. }
  25. func printUsing() {
  26.     fmt.Printf("Using: testGoldenRatio [-h|-help]\n")
  27.     fmt.Printf("This calculates the value of the golden ratio.\n")
  28. }
  29. // 이차방정식 a x^2 + b x + c  = 0 의 근을 구한다.
  30. func findQuadraticRoot(a float64, b float64, c float64) (zeros PAIR) {
  31.     if a == 0.0 {
  32.         fmt.Printf("Since the highest coefficient is zero, the given equation is not a quadratic equation.\n")
  33.         return
  34.     } else if b*b - 4*a*c < 0.0 {
  35.         fmt.Printf("Since the discriminant %f is negative, the given equation has no real root.\b", b*b - 4*a*c)
  36.         return
  37.     }
  38.     zeros.x1 = (-b + math.Sqrt(b*b - 4*a*c)) / (2.0 * a)
  39.     zeros.x2 = (-b - math.Sqrt(b*b - 4*a*c)) / (2.0 * a)
  40.     return
  41. }
  42. func main() {
  43.     var x1, x2 float64
  44.     if len(os.Args) > 1 && (os.Args[1] == "-h" || os.Args[1] == "-help") {
  45.         printUsing()
  46.         return
  47.     }
  48.    var  values = findQuadraticRoot(1.0, -1.0, -1.0)
  49.     x1 = values.x1
  50.     x2 = values.x2
  51.     if x1 >= x2 {
  52.         fmt.Printf("The bigger root is %f, \n", x1);
  53.         fmt.Printf("and the less root is %f.\n", x2);
  54.     } else {
  55.         fmt.Printf("The bigger root is %f, \n", x2);
  56.         fmt.Printf("and the less root is %f.\n", x1);
  57.     }
  58. }



컴파일> go build testGoldenRatio.go

실행> ./testGoldenRatio
The bigger root is 1.618034,
and the less root is -0.618034.


go run 명령을 이용하면 소스 코드를 직접 실행시킬 수 있다.

실행> go run testGoldenRatio.go
The bigger root is 1.618034,
and the less root is -0.618034.



Posted by Scripter
,