15

대부분의 프로그래밍 언어는 4의 제곱근에 대한 대답으로 2을 제공합니다. 그러나 대답은 두 가지입니다 : 2-2. 역사적으로 또는 다른 이유로 특별한 이유가 있습니까? 단 하나의 답이 주어지는 이유는 무엇입니까?대부분의 프로그래밍 언어는 왜 4의 제곱근에 대한 답을 하나만 제공합니까?

+2

"return all roots"를 다루기 위해 확장하면 복소수를 지원하는 내장형 언어가 매우 빨리 필요합니다. –

+0

그 언어의 이름은 무엇입니까? – bugmagnet

+0

이러한 언어 중 하나의 이름은 영어입니다. :) – mbaitoff

답변

37

이유는 X [http://mathworld.wolfram.com/SquareRoot.html] 달리 명시되지 않는

에서 수학
  • , √ X 일반적으로, 주체를 말한다 (즉 양성) 루트.
  • 일부 언어는 둘 이상의 값을 반환 할 수 없습니다.
  • 부정을 적용 할 수 있으므로 둘 다 반환하면 중복 될 수 있습니다.
+5

나는 그렇게 생각하지 않는다! 수학에서 f (x) = sqrt (x) 방정식의 해는 x = +/- 2입니다. 전적으로 선택한 도메인 (자연수, 정수, 실제 등)에 따라 다릅니다. 프로그램은 -ve 수를 허용하기 때문에 수학은 두 가지 해답을 반환하도록 지시합니다. 프로그래밍 언어를 제한하는 실용주의입니다 (파이썬은 항상 튜플을 반환 할 수 있습니다). – paxdiablo

+1

또한, 내 머리 꼭대기에서 생각할 수있는 대부분의 언어는 벡터 또는 적어도 두 가지 값을 나타내는 데이터 구조 유형을 반환 할 수 있습니다. – Cuga

+12

Pax, 제공된 참조가 보이지 않습니까? 그곳으로 가서 예쁜 무지개 위 단락에서 두 번째 문장을 읽으십시오. –

1

언제든지 다른 번호가 무엇인지 알 수 있으므로 둘 다 반환하지 않아도됩니다.

5

구현하기 위해 여러 가지 반환 유형이 귀찮습니다. 다른 결과가 정말로 필요하다면 -1만큼 결과를 배가시키는 것이 쉽지 않을까요?

10

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

12

어떤 생각 :

  • 역사적으로, 함수는 단일 값을 반환 절차로 정의했다.

  • 복수 값을 이와 같이 반환하는 클린 함수를 정의하기 위해 (기본 프로그래밍 구성을 사용하여) fiddly했을 것입니다.

  • 항상 예외가 있습니다 규칙에 : 예를 들어

    • 0 만 하나의 루트가 있습니다 (0).
    • 음수가 인 제곱근을 사용할 수 없습니다 (언어가 복소수를 지원하지 않는 한). 이는 허수 또는 복소수 시스템을 지원하지 않는 언어의 예외 (예 : "0으로 나누기")로 처리 될 수 있습니다. 2 제곱근을 추론에
  • 그것은 보통 간단하다 (단순히 함수에 의해 반환 된 값을 부정). 도메인이 양수 (+)와 음수 (-) 루트를 처리하는 데 의존하는 경우 sqrt() 함수 호출자가 연습 한 것으로 보였습니다.

+0

Apropos 음수의 제곱근 : 최소한 Lisp가 이것을 처리하고 복소수 0 + 1i를 반환합니다. ? (sqrt -1) #C (0 1) –

+0

의미 : 허수를 지원하지 않는 언어에서는 음수의 제곱근을 취할 수 없습니다. – Eddie

+0

감사합니다 - 정식으로 언급 (및 적절하게 내 대답을 편집). – LeopardSkinPillBoxHat

17

제곱근 메서드가 두 개의 값을 반환하면 그 두 개 중 하나는 사실상 항상 버려집니다. 여분의 반환 값에 대한 메모리와 복잡성을 낭비하는 것 외에도 거의 사용되지 않습니다. 누구나 -1에 의해 반환 된 답변을 여러 번 할 수 있고 다른 루트를 얻을 수 있음을 모두 알고 있습니다.

수학 언어 만이 배열이나 행렬처럼 여기에 여러 값을 반환 할 것으로 기대합니다. 그러나 대부분의 범용 프로그래밍 언어의 경우, 제안 할 때 무시할 수있는 이익과 무시할 수없는 비용이 있습니다.

8

수학에서 관습에 따라 달리 명시하지 않는 한 항상 양수 제곱근을 원한다고 가정합니다. 4의 제곱근은 실제로 2입니다. 부정적인 답을 원한다면 앞에 음수 기호를 붙이십시오. 둘 다 원하면 플러스 또는 마이너스 기호를 넣으십시오. 이 규칙이 없으면 방정식을 작성할 수 없습니다. (예를 들어, 음의 제곱근의 음수 일 수 있기 때문에) 앞에 표시를 했더라도 사람이 의도 한 것을 결코 알지 못할 것입니다. 또한 연산자가 두 개의 값을 반환하기 시작하면 수학과 관련된 컴퓨터 코드를 어떻게 작성합니까? 그것은 모든 것을 망칠 것입니다.

변수를 해결할 때이 관례의 불행한 예외가 있습니다. 다음 식에 :

X^2 = 4

당신은 양쪽의 제곱근을 경우 X 용 모두 사용할 수있는 값을 고려할 수 밖에 없다, 당신은 X = 2 얻을하지만 지금은해야합니다 가능한 해결책을 놓치지 않으려면 플러스 또는 마이너스 기호를 넣으십시오. 이 경우 기술적으로 X의 값은 4의 제곱근이 아니라 플러스 또는 마이너스가 될 수 있습니다.

+2

"수학에서 관습에 따라 달리 명시하지 않는 한 항상 양의 제곱근을 원한다고 가정합니다."- 미안하지만 100 % 올바르지 않습니다. – DanSingerman

+0

와우 필립, 정말 가혹한 답변입니다. – Albert

1

사람들이 계산기를 사용하여 제곱근을 계산할 때 양수 값만 필요하기 때문일 가능성이 큽니다.

한 걸음 더 나아가 계산기가 음수의 제곱근을 가져 오지 못하게하는 이유를 묻습니다. 허수를 사용하는 것이 가능하지만 일반 사용자는이를 위해 전혀 사용하지 않습니다. 함수가 "SQRT"이라고 때문에

On imaginary numbers.

+2

차이점은 "어떤 음수의 제곱근은 무엇입니까?"에 대한 답으로 제공 할 수있는 실제 숫자가 없다는 것입니다. 복잡한 번호 시스템을 사용해야합니다. 그래서이 질문과 관련이 있는지 잘 모르겠습니다.사실, 양의 정수의 유효한 제곱근 인 (거의 항상) 2 개의 REAL 숫자가 있습니다. 다시 한번 나는 그것이 도메인으로 되돌아 온다고 생각합니다. 사용자가 +와 - 뿌리 모두에 관심이 있다면 sqrt()가 반환하는 것으로부터 쉽게 파생시킬 수 있습니다. 때때로 실용주의는 정확성을 무시합니다. – LeopardSkinPillBoxHat

+0

실용주의에 동의하십시오. 허수 숫자의 예는 그러한 기능이 일반 사용자에게 얼마나 비현실적인지를 보여주는 것이 었습니다. – Cuga

2

나는 생각하고, 여러 뿌리를 원한다면, 당신은 당신이 할 수없는, 그래서 존재하지 않는 기능 "sqrts"를 호출 할 것이다 그것.

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

3

대부분의 프로그래머가 을 원하기 때문에 답이 하나뿐입니다.

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


그러나 요즘은 여러 언어로 두 값을 반환하기가 쉽습니다. 자바 스크립트의 경우 :

호출자가 돌아 오는 배열을 반복하는 한, 금색입니다.

>sqrts(2) 
[1.4142135623730951, -1.4142135623730951] 
9

2 개 이상의 가능성 중에서 하나의 대답 만 반환하는 많은 기능이 있습니다. 아크 탄젠트 예를 들면. 1의 아크 탄젠트는 45도로서 반환되지만, 225 또는 심지어 405 일 수도 있습니다.삶과 프로그래밍의 많은 것들과 마찬가지로, 우리가 알고 있고 의지 할 수있는 대회가 있습니다. 제곱근 함수는 양수 값을 반환합니다. 프로그래머는 우리에게 다른 해결책이 있다는 것을 명심하고 필요하다면 코드에 따라 행동해야합니다.

이것은 로봇 공학에서 일반적인 문제이며, 데카르트 위치에 해당하는 링크 위치의 여러 솔루션이있는 역학 및 역 기구학 방정식을 다루는 경우입니다.

+1

저는 개인적으로이 대답이 가장 만족 스럽다고 생각합니다. +1. –

2

알려져있는 표면의 사각형의 한 변의 길이를주는 함수로 역사적으로 정의 되었기 때문에 {{citation needed}}. 그리고 그 맥락에서 길이는 긍정적입니다.