Pergunta

A maioria das linguagens de programação dar 2 como a resposta a raiz quadrada de 4. No entanto, há duas respostas: 2 e -2. Existe alguma razão particular, histórica ou de outra forma, por que apenas uma resposta geralmente é dado?

Foi útil?

Solução

Porque:

  • Na matemática, v x geralmente, a menos que especificado de outra forma, refere-se à raiz principal (isto é, positivo) de x [ http://mathworld.wolfram.com/SquareRoot.html] .
  • Alguns idiomas não têm a capacidade de retornar mais de um valor.
  • Uma vez que você pode apenas aplicar negação, retornando ambos seria redundante.

Outras dicas

Se o método de raiz quadrada retornou dois valores, em seguida, um dos dois seria praticamente sempre ser descartada. Além de memória desperdício ea complexidade no valor de retorno extra, que seria pouco utilizado. Todo mundo sabe que você pode múltipla a resposta retornado por -1 e obter a outra raiz.

Espero que apenas linguagens matemáticas iria retornar vários valores aqui, talvez como uma matriz ou matriz. Mas para a maioria das linguagens de programação de uso geral, existe ganho insignificante e custo não negligenciável para fazer como você sugere.

Alguns pensamentos:

  • Historicamente, as funções foram definidos como procedimentos que retornados um valor único .

  • Ela teria sido complicadas (usando construções de programação primitivas) para definir uma função de limpeza que retornou vários valores como este.

  • Há sempre exceções para a regra:

    • 0, por exemplo, tem apenas um única root (0).
    • Você não pode tirar a raiz quadrada de um número negativo (a menos que a linguagem suporta números complexos). Isso poderia ser tratado como uma exceção (como "dividir por 0") em linguagens que não suportam números imaginários ou o sistema número complexo.
  • É geralmente simples de deduzir os 2 raízes quadradas (simplesmente nega o valor retornado pela função). Isso provavelmente foi deixado como um exercício pelo chamador da função sqrt (), se o seu domínio dependia tratar tanto o positivo (+) e negativo (-). Raízes

É mais fácil voltar um número do que voltar dois. A maioria das decisões de engenharia são feitos dessa maneira.

Existem muitas funções que só retornam 1 resposta de 2 ou mais possibilidades. Arco tangente por exemplo. O arco tangente de 1 é retornado como 45 graus, mas também pode ser 225 ou mesmo 405. Tal como acontece com muitas coisas na vida e programação existe uma convenção que sabemos e pode confiar. funções de raiz quadrada retornar valores positivos é um deles. Cabe a nós, os programadores, para manter em mente que existem outras soluções e agir sobre eles, se necessário no código.

Pela forma como este é um problema comum em robótica quando se lida com cinemática e cinemática equações inversas onde existem múltiplas soluções de posições links correspondentes às posições cartesianas.

Na matemática, por convenção é sempre assumido que você quer a raiz quadrada positiva de algo menos que você diga explicitamente o contrário. A raiz quadrada de quatro é realmente dois. Se você quer a resposta negativa, coloque um sinal negativo na frente. Se você quer tanto, colocar o sinal de mais-ou-menos. Sem essa convenção seria impossível equações escrita; você nunca sabe o que a pessoa pretendida, mesmo se eles não coloque um sinal na frente (porque poderia ser o negativo da raiz quadrada negativa, por exemplo). Além disso, como exatamente você deve escrever qualquer tipo de código de computador envolvendo a matemática, se os operadores começaram a voltar dois valores? Ele iria quebrar tudo.

A exceção lamentável para esta convenção é quando resolvendo para variáveis. Na equação a seguir:

x ^ 2 = 4

Você não tem escolha, mas para considerar os dois valores possíveis para X. se você tirar a raiz quadrada de ambos os lados, você tem x = 2, mas agora você deve colocar no mais ou menos assinar para se certificar de que você não está faltando todas as soluções possíveis. Além disso, lembre-se que, neste caso, é tecnicamente X que pode ser mais ou menos, não a raiz quadrada de quatro.

Como vários tipos de retorno são irritantes para implementar. Se você realmente precisa do outro resultado, não é fácil o suficiente para apenas múltipla o resultado por -1?

Como a maioria dos programadores única deseja uma resposta.

É fácil o suficiente para gerar o valor negativo do valor positivo se o chamador quer. Para a maioria do código do chamador usa apenas o valor positivo.


No entanto, hoje em dia é fácil para retornar dois valores em muitas línguas. Em JavaScript:

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

Enquanto o chamador sabe para percorrer a matriz que vem de volta, você é ouro.

>sqrts(2)
[1.4142135623730951, -1.4142135623730951]

Acho que é porque a função é chamada "sqrt", e se você queria múltiplas raízes, você teria que chamar a função "raízes quadradas", que não existe, então você não pode fazê-lo.

A resposta mais grave é que você está sugerindo uma instância específica de um problema maior. Muitas equações e funções comumente inversas (incluindo sqrt) têm múltiplas soluções possíveis, tais como arcsin, etc, e estes são, em geral, um problema. Com arcsin, por exemplo, se deve retornar um número infinito de respostas? Veja, por exemplo, as discussões sobre cortes filiais .

Porque foi historicamente definida {{citação necessário}} como a função que dá o comprimento do lado de um quadrado de superfície conhecida. E comprimento é positiva nesse contexto.

Você pode sempre dizer o que é o outro número, por isso, talvez não seja necessário voltar a ambos.

É provável, porque quando as pessoas usam uma calculadora para descobrir a raiz quadrada, eles só querem o valor positivo.

ir um passo além e perguntar por que sua calculadora não vai deixar você tirar a raiz quadrada de um número negativo. É possível, usando números imaginários, mas o usuário médio tem absolutamente zero de uso para isso.

Em números imaginários.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top