2017-04-25 17 views
1

제가 만든 전력 함수에 대해이 코드를 가지고 있고 두 개의 루프 (양수에 대해 하나와 음수 지수에 대해 하나)를 결합하는 방법이 있다고 들었습니다. 조건부 연산자전원 함수를 작성하는 더 좋은 방법이 필요합니다.

double myPow(double base, int exponent) { 
    double result = 1; 
    for (int i = 0; i < exponent; i++) { 
     result *= base; 
    } 
    for (int i = 0; i > exponent; --i) { 
     result /= base; 
    } 
    return result; 
} 

어디서부터 시작해야합니까?

+6

이가 가야 [** 코드 검토 **]을 (HTTPS : //codereview.stackexchange.com/) –

+4

코드 검토에 있어야하기 때문에이 주제를 오프 토픽으로 닫으려고 합니다만, 어쨌든이 어리석은 대화 상자에는 코드가 없습니다. –

+1

어이 바보가 아니에요. –

답변

1

어때?

double myPow(double base, int exponent) { 
    double result = 1; 
    if (exponent < 0) { 
     exponent = -exponent; 
     base = 1/base; 
    } 
    for (int i = 0; i < exponent; i++) { 
     result *= base; 
    } 
    return result; 
} 
+0

이것은 최적으로 해결하기가 어려운 문제입니다. 크 누스 2 권 4.6.4 "권력 평가"를 참조한다. 알고리즘 A는 좋은 시작이 될 것입니다. –

+0

아니요. (((((^ 2)^2)^2)^2)^2)^2)^2)^2)를 관찰하여 x^256을 최적화 할 수 있기 때문에 단지 8 평방 연산 만 필요합니다. –

0

당신은 루프 지수에 대한 절대 값을 가져온 다음 조건 연산자를 사용하여 루프 내부에 작업을 수행 할 수 있습니다

double result = 1; 
int absExp = std::abs(exponent); 
for (int i = 0; i < absExp; i++) { 
    exponent < 0 ? // division : // multiplication 
} 
+0

@Quentin Whoops. –

+0

고마워, 나는 이런 식으로 일하려고 애썼다. – rchkrvr2