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

See:  http://en.wikipedia.org/wiki/Golden_ratio

  1. /*
  2.  *  Filename: testGoldenRatio.groovy
  3.  *    황금률(즉, 이차방정식 x^2 - x - 1  = 0 의 양의 근)을 계산한다.
  4.  *
  5.  *   Execute: groovy testGoldenRatio.groovy
  6.  *
  7.  *      Date:  2008/03/24
  8.  *    Author:  PH Kim   [ pkim (AT) scripts.pe.kr ]
  9.  */
  10. import java.util.ArrayList
  11. def printUsing() {
  12.     println("Using: groovy testGoldenRatio.groovy [-h|-help]")
  13.     println("This calculates the value of the golden ratio.")
  14. }
  15. // 이차방정식 a x^2 + b x + c  = 0 의 근을 구한다.
  16. def findQuadraticRoot(double a, double b, double c) {
  17.     if (a == 0.0) {
  18.         throw new RuntimeException("Since the highest coefficient is zero, the given equation is not a quadratic equation.");
  19.     }
  20.     else if (b*b - 4*a*c < 0.0) {
  21.         throw new RuntimeException("Since the discriminant " + (b*b - 4*a*c) + " is negative, the given equation has no real root.")
  22.     }
  23.     double x1 = (-b + Math.sqrt(b*b - 4*a*c)) / (2.0 * a)
  24.     double x2 = (-b - Math.sqrt(b*b - 4*a*c)) / (2.0 * a)
  25.     def array = [x1, x2].asImmutable()
  26.     return array
  27. }
  28. // 실행 시작 지점
  29. if (args.length > 0 && (args[0].equals("-h") || args[0].equals("-help"))) {
  30.     printUsing()
  31.     System.exit(1)
  32. }
  33. def values = findQuadraticRoot(1.0, -1.0, -1.0)
  34. def x1 = values[0]
  35. def x2 = values[1]
  36. if (x1 >= x2) {
  37.     println("The bigger root is " + x1 + ", ")
  38.     println("and the less root is " + x2 + ".")
  39. }
  40. else {
  41.     println("The bigger root is " + x2 + ", ")
  42.     println("and the less root is " + x1 + ".")
  43. }



실행> groovy testGoldenRatio.groovy
The bigger root is 1.618033988749895,
and the less root is -0.6180339887498949.




Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.

Posted by Scripter
,