문제

대부분의 프로그래밍 언어는 제공합니다 2 제곱근에 대한 답으로 4. 그러나 두 가지 답변이 있습니다. 2 그리고 -2. 역사적이거나 다른 이유가 있는데, 왜 하나의 대답 만 주어 지는가?

도움이 되었습니까?

해결책

왜냐하면:

  • 수학에서 √엑스 일반적으로, 달리 명시되지 않는 한, 주요 (즉, 양성) 근본을 나타냅니다. 엑스 [http://mathworld.wolfram.com/squareroot.html.
  • 일부 언어에는 둘 이상의 가치를 반환 할 수 없습니다.
  • 부정을 적용 할 수 있으므로 둘 다 반환하면 중복됩니다.

다른 팁

제곱근 메소드가 두 값을 반환하면이 두 가지 중 하나는 항상 실제로 폐기됩니다. 여분의 리턴 값에 대한 메모리와 복잡성을 낭비하는 것 외에도 거의 사용되지 않을 것입니다. 누구나 여러분이 반환 한 답변을 여러 번 사용할 수 있다는 것을 알고 있습니다. -1 그리고 다른 뿌리를 얻으십시오.

수학적 언어만이 여기에서 배열이나 행렬로 여러 값을 반환 할 것으로 기대합니다. 그러나 대부분의 일반 목적 프로그래밍 언어의 경우, 귀하가 제안한대로 수행하는 데 무시할만한 이익과 무시할 수없는 비용이 있습니다.

몇 가지 생각 :

  • 역사적으로 기능은 단일 값.

  • 반환 된 깨끗한 함수를 정의하는 것은 (원시 프로그래밍 구성을 사용하여) 충실했을 것입니다. 여러 값 이와 같이.

  • 항상 있습니다 예외 규칙에 :

    • 0 예를 들어 0 만 있습니다 하나의 루트 (0).
    • 당신은 a의 제곱근을 취할 수 없습니다 음수 (언어가 복소 번호를 지원하지 않는 한). 이것은 가상의 숫자 나 복소수 시스템을 지원하지 않는 언어로 예외 ( "0으로 나누기")로 취급 될 수 있습니다.
  • 일반적으로 간단합니다 추론 2 정사각형 뿌리 (단순히 함수에 의해 반환 된 값을 무효화). 이것은 아마도 sqrt () 함수의 발신자가 운동으로 남겨 졌을 것입니다. 도메인 양수 (+) 및 음성 (-) 뿌리를 다루는 데 의존했습니다.

둘을 반환하는 것보다 하나의 번호를 반환하는 것이 더 쉽습니다. 대부분의 엔지니어링 결정은 이러한 방식으로 이루어집니다.

2 개 이상의 가능성에서 1 개의 답변 만 반환하는 많은 기능이 있습니다. 예를 들어 아크 탄젠트. 1의 아크 탄젠트는 45 도로 반환되지만 225 또는 405 일 수도 있습니다. 인생과 프로그래밍의 많은 것들과 마찬가지로 우리가 알고 있고 의존 할 수있는 컨벤션이 있습니다. 제곱근 함수 반환 양수 값은 그중 하나입니다. 다른 솔루션이 있다는 점을 명심하고 코드에 필요한 경우 조치를 취하는 것은 프로그래머에게 달려 있습니다.

그건 그렇고, 이것은 직교 위치에 해당하는 여러 링크 위치에 대한 여러 솔루션이있는 역 운동학 방정식을 다룰 때 로봇 공학에서 일반적인 문제입니다.

수학에서 컨벤션에 의해 항상 당신이 명시 적으로 말하지 않으면 무언가의 긍정적 인 제곱근을 원한다고 가정합니다. 4의 제곱근은 실제로 2입니다. 부정적인 대답을 원한다면 전면에 부정적인 부호를 넣으십시오. 둘 다 원한다면 플러스 또는 마이너스 사인을 넣으십시오. 이 협약이 없다면 방정식을 작성하는 것은 불가능할 것입니다. 예를 들어, 부정적인 제곱근의 부정적인 일 수 있기 때문에 사람이 무엇을 의도했는지 알지 못할 것입니다. 또한 운영자가 두 값을 반환하기 시작하면 수학과 관련된 컴퓨터 코드를 어떻게 정확히 작성 하시겠습니까? 그것은 모든 것을 깨뜨릴 것입니다.

이 협약에 대한 불행한 예외는 변수를 해결할 때입니다. 다음 방정식에서 :

x^2 = 4

X에 대한 가능한 값을 모두 고려하는 것 외에는 선택의 여지가 없습니다. 양쪽의 제곱근을 취하면 x = 2를 얻을 수 있지만 이제 가능한 솔루션이 누락되지 않도록 플러스 또는 마이너스 부호를 넣어야합니다. . 또한이 경우 기술적으로 4의 제곱근이 아니라 플러스 또는 마이너스가 될 수있는 기술적으로 X라는 것을 기억하십시오.

여러 반환 유형이 구현하기가 성가시기 때문입니다. 실제로 다른 결과가 필요하다면 결과를 -1로 여러 번만하기에 충분하지 않습니까?

대부분의 프로그래머 만 있기 때문입니다 원하다 하나의 대답.

발신자가 원한다면 양수 값에서 음수 값을 생성하는 것은 쉽습니다. 대부분의 코드의 경우 발신자는 양수 값 만 사용합니다.


그러나 요즘에는 여러 언어로 두 가지 값을 반환하기가 쉽습니다. JavaScript :

var sqrts=function(x) {
  var s=Math.sqrt(x);
  if (s>0) {
    return [s,-s];
  } else {
    return [0];
  }
}

발신자가 돌아 오는 배열을 반복한다는 것을 알고있는 한, 당신은 금입니다.

>sqrts(2)
[1.4142135623730951, -1.4142135623730951]

이 기능을 "SQRT"라고하고 여러 뿌리를 원한다면 존재하지 않는 함수를 "sqrts"라고 부를 필요가 있다고 생각합니다.

더 심각한 대답은 더 큰 문제의 특정 사례를 제안한다는 것입니다. 많은 방정식과 일반적으로 역 함수 (SQRT 포함)에는 Arcsin 등과 같은 여러 가능한 솔루션이 있으며 일반적으로 문제입니다. 예를 들어 ArcSin을 사용하면 무한한 수의 답변을 반환해야합니까? 예를 들어, 토론을 참조하십시오 분기 컷.

역사적으로 {{인용 필요}}}이 알려진 표면의 정사각형의 측면 길이를 제공하는 함수로 정의 되었기 때문입니다. 그리고 그 맥락에서 길이는 양수입니다.

항상 다른 번호가 무엇인지 알 수 있으므로 둘 다 반환 할 필요는 없습니다.

사람들이 계산기를 사용하여 제곱근을 파악할 때 긍정적 값 만 원하기 때문일 수 있습니다.

한 걸음 더 나아가 계산기로 인해 음수의 제곱근을 가져갈 수없는 이유를 물어보십시오. 가상의 숫자를 사용하면 가능하지만 평균 사용자는 이에 절대 사용하지 않습니다.

상상의 숫자.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top