2014-02-15 3 views
-1

숫자의 제곱근을 취하는 수학에서는 음수와 양수근을 모두 제공해야합니다. 예를 들면 다음과 같습니다 (대부분의 프로그래밍 언어와 함께)두 제곱근을 계산하십시오

그러나
√4 = -2 and +2 

C 번호 만 2를 반환합니다.

그래서 내가 좋아하는 클래스 수 :

class PlusMinus 
{ 
    double A; 
    double B; 

    public PlusMinus(double _A, double _B) 
    { 
     A=_A; 
     B=_B; 
    } 

    public static PlusMinus Sqrt(double Number) 
    { 
     double A = Math.Sqrt(Number); 
     return new PlusMinus(A, -A); 
    } 
} 

을하지만 그 다음도 -2+2, 또는 다시 -22을 제공 16^0.25 제공 4^0.5으로이 같은 당량 취급하지 않습니다. 작업을 수행

public static PlusMinus Pow(double Number, double Power) 
{ 
    double A = Math.Pow(Number, Power); 
    if(Math.Pow(-A, 1/Power) == Number){ 
     return new PlusMinus(A, -A); 
    } 
    return new PlusMinus(A, A); 
} 

:

은 그 다음 나는 Pow 기능을 다시 해봐야 할 것 같습니다. 그러나 이것은 가장 효율적인 계산 방법이 아닙니다. C#의 실제 제곱근. 더 좋은 방법이 있습니까?

+2

두 배로 작업해야한다고 생각하지 않습니다. 여기에 지수가있다. 모든 +/- 결과는 짝수 정수 또는 그 반대의 값이기 때문입니다. – Euphoric

+0

_ 그러나 이것은 가장 효율적인 방법으로 보이지 않습니다. 왜 그렇게 생각하니? 특별한 이유가 있습니까? –

+0

@ SonerGönül 각각의 힘에 대해 역함수 ('Math.Pow (-A, 1/Power)')를 검사하고 있습니다. 나는 컴퓨터가해야 할 일을 효과적으로 두 배로 늘리고 있다고 생각한다. – Bonzo

답변

1

특정 전력으로 숫자를 올리면 두 가지 옵션이 있습니다. 분모가 짝수이면 더하기 및 빼기를 넣거나 분모가 홀수이어야하며이 경우 루트가 하나뿐입니다 . 그래서 당신이 모든 실제 뿌리 (때로는 더 복잡한 뿌리가 있음)를 원한다면 조건을 수행해야하며 더 효율적인 방법은 없습니다 ..

관련 문제