2013-07-16 3 views
0

std :: pow는 기본 값과 지수 값의 대부분 조합에 적합합니다.음수의 기본 경우 Pow와 같은 함수

그러나 염기가 음수이고 분수이면 std :: pow가 끝납니다. 예상 값이 대략 때 NaN이 아래의 예에서

(정의에 따라) 반환됩니다 -1.2332863005546

#include <cmath> 
#include <cstdio> 

int main() 
{ 
    double a = -1.1; 
    double b = 2.2; 
    double c = std::pow(a,b); 
    printf("%5.2f^%5.2f = %25.10f\n",a,b,c); 
    return 0; 
} 

내 질문은 : 일반 펑 기능을 개발하는 방법에 어떤 아이디어가 베이스가 음수 일 때 NaN 이외의 값을 반환합니까?

업데이트 - 항상 복소수로만 표현할 수있는 결과 클래스가 있습니다.

+0

지수를 분수로 분해 한 다음 근력에 'pow'를 사용하고 밑이 음수로 표시되면'abs'를 사용해야합니다. –

+0

수학적으로 이것이 무엇을 의미한다고 생각하십니까? 당신은 복소수가 필요합니다. – BoBTFish

+0

음수의 소수력은 복잡한 공간에서 여러 가지 해결책을 가지고 있습니다 ... – sashkello

답변

6

예상되는 값이 아닙니다. 예상 값은 복소수 0.998 + 0.725i입니다. abstd::complex<double>으로 정의하면 작동합니다.

+0

에 가까운 복소수를 생성 할 수 있습니다. , 이것은 기대 값입니다. 아니면 적어도 그들 중 하나. 질문에 대한 내 의견을 참조하십시오. –

+0

네거티브베이스의 전원 작동에 대한 지식을 새로 고침 할 수 있습니다. – filmor

+1

좀 더 정확히 말하면 다음과 같습니다. http://en.wikipedia.org/wiki/Exponentiation#Real_exponents_with_negative_base. 귀하의 솔루션은 복소 로그의 다른 (비 전통적인) 선택을 요구합니다. – filmor