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

See:  Golden ratio - Sajun.org


  1. /*
  2.  *  Filename: testGoldenRatioCPP.cpp
  3.  *    황금률(즉, 이차방정식 x^2 - x - 1  = 0 의 양의 근)을 계산한다.
  4.  *
  5.  *   Compile: cl -GX testGoldenRatioCPP.cpp
  6.  *
  7.  *   Execute: testGoldenRatioCPP
  8.  *
  9.  *      Date:  2008/03/24
  10.  *    Author:  PH Kim   [ pkim (AT) scripts.pe.kr ]
  11.  */
  12. #include <iostream>
  13. #include <string>
  14. #include <cmath>
  15. using namespace std;
  16. typedef struct _PAIR {
  17.     double x1;
  18.     double x2;
  19. } PAIR;
  20. void printUsing() {
  21.     cout << "Using: testGoldenRatioCPP [-h|-help]" << endl;
  22.     cout << "This calculates the value of the golden ratio." << endl;
  23. }
  24. // 이차방정식 a x^2 + b x + c  = 0 의 근을 구한다.
  25. PAIR *findQuadraticRoot(double a, double b, double c) {
  26.     static PAIR zeros;
  27.     if (a == 0.0) {
  28.         cerr << "Since the highest coefficient is zero, the given equation is not a quadratic equation." << endl;
  29.         exit(1);
  30.     }
  31.     else if (b*b - 4*a*c < 0.0) {
  32.         cerr << "Since the discriminant " << (b*b - 4*a*c) << " is negative, the given equation has no real root." << endl;
  33.         exit(1);
  34.     }
  35.     zeros.x1 = (-b + sqrt(b*b - 4*a*c)) / (2.0 * a);
  36.     zeros.x2 = (-b - sqrt(b*b - 4*a*c)) / (2.0 * a);
  37.     return (PAIR *) &zeros;
  38. }
  39. void main(int argc, char *argv[]) {
  40.     double x1, x2;
  41.     PAIR *values = (PAIR *) findQuadraticRoot(1.0, -1.0, -1.0);
  42.     if (argc > 1 && (strcmp(argv[1], "-h") == 0 || strcmp(argv[1], "-help") == 0)) {
  43.         printUsing();
  44.         exit(1);
  45.     }
  46.     values = findQuadraticRoot(1.0, -1.0, -1.0);
  47.     x1 = values->x1;
  48.     x2 = values->x2;
  49.     if (x1 >= x2) {
  50.         cout << "The bigger root is " << x1 << endl;
  51.         cout << "and the less root is " << x2 << endl;
  52.     }
  53.     else {
  54.         cout << "The bigger root is " << x2 << endl;
  55.         cout << "and the less root is " << x1 << endl;
  56.     }
  57. }



컴파일> cl -GX testGoldenRatioCPP.cpp

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



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

Posted by Scripter
,