다음은 이차방정식 x^2 - x - 1 = 0 의 양의 근 즉 황금비율(golden ratio)을 구하는 C++ 애플리케이션 소스이다. 황금비율을 구하는 비례방정식은 1 : x = x : (x+1) 이며, 이를 이차방정식으로 표현한 것이 x^2 - x - 1 = 0 이다.
See: Golden ratio - Sajun.org
- /*
- * Filename: testGoldenRatioCPP.cpp
- * 황금률(즉, 이차방정식 x^2 - x - 1 = 0 의 양의 근)을 계산한다.
- *
- * Compile: cl -GX testGoldenRatioCPP.cpp
- *
- * Execute: testGoldenRatioCPP
- *
- * Date: 2008/03/24
- * Author: PH Kim [ pkim (AT) scripts.pe.kr ]
- */
- #include <iostream>
- #include <string>
- #include <cmath>
- using namespace std;
- typedef struct _PAIR {
- double x1;
- double x2;
- } PAIR;
- void printUsing() {
- cout << "Using: testGoldenRatioCPP [-h|-help]" << endl;
- cout << "This calculates the value of the golden ratio." << endl;
- }
- // 이차방정식 a x^2 + b x + c = 0 의 근을 구한다.
- PAIR *findQuadraticRoot(double a, double b, double c) {
- static PAIR zeros;
- if (a == 0.0) {
- cerr << "Since the highest coefficient is zero, the given equation is not a quadratic equation." << endl;
- exit(1);
- }
- else if (b*b - 4*a*c < 0.0) {
- cerr << "Since the discriminant " << (b*b - 4*a*c) << " is negative, the given equation has no real root." << endl;
- exit(1);
- }
- zeros.x1 = (-b + sqrt(b*b - 4*a*c)) / (2.0 * a);
- zeros.x2 = (-b - sqrt(b*b - 4*a*c)) / (2.0 * a);
- return (PAIR *) &zeros;
- }
- void main(int argc, char *argv[]) {
- double x1, x2;
- PAIR *values = (PAIR *) findQuadraticRoot(1.0, -1.0, -1.0);
- if (argc > 1 && (strcmp(argv[1], "-h") == 0 || strcmp(argv[1], "-help") == 0)) {
- printUsing();
- exit(1);
- }
- values = findQuadraticRoot(1.0, -1.0, -1.0);
- x1 = values->x1;
- x2 = values->x2;
- if (x1 >= x2) {
- cout << "The bigger root is " << x1 << endl;
- cout << "and the less root is " << x2 << endl;
- }
- else {
- cout << "The bigger root is " << x2 << endl;
- cout << "and the less root is " << x1 << endl;
- }
- }
컴파일> cl -GX testGoldenRatioCPP.cpp
실행> testGoldenRatioCPP
The bigger root is 1.618034,
and the less root is -0.618034.
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
'프로그래밍 > C++' 카테고리의 다른 글
진법(radix) 표 만들기 예제 with C++ (0) | 2008.03.30 |
---|---|
대화형 모드의 진법(radix) 변환 예제 with C++ (0) | 2008.03.29 |
현재 시각 알아내기 for C++ (0) | 2008.03.24 |
C++ 언어 소스 코드(소수 찾기 코드) 리팩토링 (0) | 2008.03.21 |
GMP 사용 예제 for C++ (0) | 2008.03.19 |