다음은 이차방정식 x^2 - x - 1 = 0 의 양의 근 즉 황금비율(golden ratio)을 구하는 Scala애플리케이션 소스이다. 황금비율을 구하는 비례방정식은 1 : x = x : (x+1) 이며, 이를 이차방정식으로 표현한 것이 x^2 - x - 1 = 0 이다.
See: http://en.wikipedia.org/wiki/Golden_ratio
- /*
- * Filename: testGoldenRatio.scala
- * 황금률(즉, 이차방정식 x^2 - x - 1 = 0 의 양의 근)을 계산한다.
- *
- * Execute: scala testGoldenRatio.scala
- *
- * Date: 2009/03/09
- * Author: PH Kim [ pkim (AT) scripts.pe.kr ]
- */
- def printUsing() {
- println("Using: scala testGoldenRatio.scala [-h|-help]")
- println("This calculates the value of the golden ratio.")
- }
- // 이차방정식 a x^2 + b x + c = 0 의 근을 구한다.
- def findQuadraticRoot(a: Double, b: Double, c: Double) : Array[Double] = {
- if (a == 0.0) {
- throw new RuntimeException("Since the highest coefficient is zero, the given equation is not a quadratic equation.")
- }
- else if (b*b - 4*a*c < 0.0) {
- throw new RuntimeException("Since the discriminant " + (b*b - 4*a*c) + " is negative, the given equation has no real root.")
- }
- var x1 : Double = (-b + Math.sqrt(b*b - 4*a*c)) / (2.0 * a)
- var x2 : Double = (-b - Math.sqrt(b*b - 4*a*c)) / (2.0 * a)
- var array : Array[Double] = Array(x1, x2)
- return array
- }
- // 실행 시작 지점
- if (args.length > 0 && (args(0).equals("-h") || args(0).equals("-help"))) {
- printUsing()
- System.exit(1)
- }
- var values : Array[Double] = findQuadraticRoot(1.0, -1.0, -1.0)
- var x1 : Double = values(0)
- var x2 : Double = values(1)
- if (x1 >= x2) {
- println("The bigger root is " + x1 + ", ")
- println("and the less root is " + x2 + ".")
- }
- else {
- println("The bigger root is " + x2 + ", ")
- println("and the less root is " + x1 + ".")
- }
실행> scala testGoldenRatio.scala
The bigger root is 1.618033988749895,
and the less root is -0.6180339887498949.
'프로그래밍 > Scala' 카테고리의 다른 글
스트링 배열 정렬(sorting)하기 with Scala (0) | 2009.04.18 |
---|---|
대화형 모드의 진법(radix) 변환 예제 with Scala (0) | 2009.03.09 |
현재 시각 알아내기 for Scala (0) | 2009.03.09 |
조립제법(Horner의 방법) 예제 for Scala (0) | 2008.06.04 |
80컬럼 컨솔에 19단표 출력하기 예제 for Scala (0) | 2008.05.18 |