Pregunta

La mayoría de los lenguajes de programación dan 2 como la respuesta a la raíz cuadrada de 4 . Sin embargo, hay dos respuestas: 2 y -2 . ¿Hay alguna razón en particular, histórica o de otro tipo, por la cual solo se da una respuesta?

¿Fue útil?

Solución

Porque:

  • En matemáticas, v x comúnmente, a menos que se especifique lo contrario, se refiere a la raíz principal (es decir, positiva) de x [ http://mathworld.wolfram.com/SquareRoot.html] .
  • Algunos idiomas no tienen la capacidad de devolver más de un valor.
  • Dado que solo puede aplicar la negación, devolver ambos sería redundante.

Otros consejos

Si el método de la raíz cuadrada devolviera dos valores, uno de esos dos prácticamente siempre se descartaría. Además de desperdiciar memoria y complejidad en el valor de retorno adicional, sería poco utilizado. Todo el mundo sabe que puede multiplicar la respuesta devuelta por -1 y obtener la otra raíz.

Espero que solo los lenguajes matemáticos devuelvan valores múltiples aquí, tal vez como una matriz o matriz. Pero para la mayoría de los lenguajes de programación de propósito general, hay una ganancia insignificante y un costo no insignificante para hacer lo que usted sugiere.

Algunas ideas:

  • Históricamente, las funciones se definían como procedimientos que devolvían un valor único .

  • Hubiera sido complicado (usando construcciones de programación primitivas) definir una función limpia que devolviera valores múltiples de esta manera.

  • Siempre hay excepciones a la regla:

    • 0, por ejemplo, solo tiene una raíz única (0).
    • No puede sacar la raíz cuadrada de un número negativo (a menos que el idioma admita números complejos). Esto podría tratarse como una excepción (como "dividir por 0") en idiomas que no admiten números imaginarios o el sistema de números complejos.
  • Por lo general, es simple deducir las 2 raíces cuadradas (simplemente niega el valor devuelto por la función). El autor de la función sqrt () probablemente dejó esto como un ejercicio, si su dominio dependía de tratar con las raíces positivas (+) y negativas (-).

Es más fácil devolver un número que devolver dos. La mayoría de las decisiones de ingeniería se toman de esta manera.

Hay muchas funciones que solo devuelven 1 respuesta de 2 o más posibilidades. Arco tangente por ejemplo. El arco tangente de 1 se devuelve como 45 grados, pero también podría ser 225 o incluso 405. Como con muchas cosas en la vida y la programación, hay una convención que conocemos y en la que podemos confiar. Las funciones de raíz cuadrada devuelven valores positivos es una de ellas. Depende de nosotros, los programadores, tener en cuenta que hay otras soluciones y actuar sobre ellas si es necesario en el código.

Por cierto, este es un problema común en robótica cuando se trata de ecuaciones cinemáticas y cinemáticas inversas donde hay múltiples soluciones de posiciones de enlaces correspondientes a posiciones cartesianas.

En matemáticas, por convención siempre se supone que desea la raíz cuadrada positiva de algo a menos que explícitamente diga lo contrario. La raíz cuadrada de cuatro es realmente dos. Si quieres la respuesta negativa, pon un signo negativo al frente. Si desea ambos, coloque el signo más o menos. Sin esta convención sería imposible escribir ecuaciones; nunca sabría lo que la persona pretendía incluso si pusiera un signo al frente (porque podría ser el negativo de la raíz cuadrada negativa, por ejemplo). Además, ¿cómo escribiría exactamente cualquier tipo de código de computadora que involucrara matemáticas si los operadores comenzaran a devolver dos valores? Rompería todo.

La desafortunada excepción a esta convención es cuando se resuelven variables. En la siguiente ecuación:

x ^ 2 = 4

No tiene más remedio que considerar los dos valores posibles para X. Si saca la raíz cuadrada de ambos lados, obtiene x = 2, pero ahora debe colocar el signo más o menos para asegurarse de que no falte Cualquier posible solución. Además, recuerde que en este caso es técnicamente X lo que puede ser más o menos, no la raíz cuadrada de cuatro.

Porque múltiples tipos de retorno son molestos de implementar. Si realmente necesita el otro resultado, ¿no es lo suficientemente fácil simplemente multiplicar el resultado por -1?

Porque la mayoría de los programadores solo quieren una respuesta.

Es bastante fácil generar el valor negativo a partir del valor positivo si la persona que llama lo quiere. Para la mayoría de los códigos, la persona que llama solo usa el valor positivo.


Sin embargo, hoy en día es fácil devolver dos valores en muchos idiomas. En JavaScript:

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

Mientras la persona que llama sepa iterar a través de la matriz que regresa, eres oro.

>sqrts(2)
[1.4142135623730951, -1.4142135623730951]

Creo que debido a que la función se llama "sqrt", y si desea múltiples raíces, tendría que llamar a la función "sqrts", que no existe, por lo que no puede hacerlo.

La respuesta más seria es que estás sugiriendo una instancia específica de un problema mayor. Muchas ecuaciones y funciones comúnmente inversas (incluyendo sqrt) tienen múltiples soluciones posibles, como arcsin, etc., y estas son, en general, un problema. Con arcsin, por ejemplo, ¿debería uno devolver un número infinito de respuestas? Vea, por ejemplo, discusiones sobre cortes de rama .

Porque históricamente se definió {{cita requerida}} como la función que da la longitud lateral de un cuadrado de superficie conocida. Y la longitud es positiva en ese contexto.

siempre puedes decir cuál es el otro número, por lo que tal vez no sea necesario devolverlos a ambos.

Es probable porque cuando las personas usan una calculadora para calcular una raíz cuadrada, solo quieren el valor positivo.

Vaya un paso más allá y pregunte por qué su calculadora no le permitirá sacar la raíz cuadrada de un número negativo. Es posible, usando números imaginarios, pero el usuario promedio no tiene absolutamente ningún uso para esto.

En números imaginarios.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top