Domanda

La maggior parte dei linguaggi di programmazione fornisce 2 come risposta alla radice quadrata di 4 . Tuttavia, ci sono due risposte: 2 e -2 . C'è qualche motivo particolare, storico o no, perché di solito viene data una sola risposta?

È stato utile?

Soluzione

A causa:

  • In matematica, & # 8730; x comunemente, se non diversamente specificato, si riferisce alla radice principale (cioè positiva) di x [ http://mathworld.wolfram.com/SquareRoot.html] .
  • Alcune lingue non hanno la possibilità di restituire più di un valore.
  • Dato che puoi semplicemente applicare la negazione, la restituzione di entrambi sarebbe ridondante.

Altri suggerimenti

Se il metodo della radice quadrata restituiva due valori, uno di questi due verrebbe praticamente sempre scartato. Oltre a sprecare memoria e complessità sul valore di restituzione aggiuntivo, sarebbe poco utilizzato. Tutti sanno che puoi moltiplicare la risposta restituita da -1 e ottenere l'altra radice.

Mi aspetto che solo i linguaggi matematici restituiscano più valori qui, forse come matrice o matrice. Ma per la maggior parte dei linguaggi di programmazione per scopi generici, c'è un guadagno trascurabile e costi non trascurabili nel fare ciò che suggerisci.

Alcuni pensieri:

  • Storicamente, le funzioni erano definite come procedure che restituivano un valore singolo .

  • Sarebbe stato complicato (usando costrutti di programmazione primitivi) definire una funzione pulita che restituiva valori multipli come questo.

  • Ci sono sempre eccezioni alla regola:

    • 0 ad esempio ha solo un singolo root (0).
    • Non puoi prendere la radice quadrata di un numero negativo (a meno che la lingua non supporti numeri complessi). Questo potrebbe essere trattato come un'eccezione (come "dividere per 0") in lingue che non supportano numeri immaginari o il complesso sistema di numeri.
  • Di solito è semplice dedurre le 2 radici quadrate (semplicemente negare il valore restituito dalla funzione). Questo è stato probabilmente lasciato come esercizio dal chiamante della funzione sqrt (), se il loro dominio dipendeva dal trattare con entrambe le radici positive (+) e negative (-).

È più facile restituire un numero che restituire due. La maggior parte delle decisioni di ingegneria vengono prese in questo modo.

Esistono molte funzioni che restituiscono solo 1 risposta da 2 o più possibilità. Arco tangente per esempio. L'arco tangente di 1 viene restituito come 45 gradi, ma potrebbe anche essere 225 o addirittura 405. Come per molte cose nella vita e nella programmazione, esiste una convenzione che conosciamo e su cui possiamo contare. Le funzioni della radice quadrata restituiscono valori positivi è uno di questi. Spetta a noi programmatori tenere a mente che esistono altre soluzioni e agire su di esse se necessario nel codice.

A proposito, questo è un problema comune nella robotica quando si ha a che fare con la cinematica e le equazioni della cinematica inversa in cui esistono molteplici soluzioni di posizioni dei collegamenti corrispondenti alle posizioni cartesiane.

In matematica, per convenzione, si presume sempre che tu voglia la radice quadrata positiva di qualcosa a meno che tu non dica esplicitamente diversamente. La radice quadrata di quattro è davvero due. Se vuoi la risposta negativa, metti un segno negativo in primo piano. Se vuoi entrambi, metti il ??segno più o meno. Senza questa convenzione sarebbe impossibile scrivere equazioni; non sapresti mai cosa intendesse la persona anche se avesse messo un segno in primo piano (perché potrebbe essere il negativo della radice quadrata negativa, per esempio). Inoltre, come scriveresti esattamente qualsiasi tipo di codice informatico che coinvolga la matematica se gli operatori iniziassero a restituire due valori? Si spezzerebbe tutto.

La sfortunata eccezione a questa convenzione è quando si risolvono le variabili. Nella seguente equazione:

x ^ 2 = 4

Non hai altra scelta che considerare entrambi i possibili valori per X. Se prendi la radice quadrata di entrambi i lati, ottieni x = 2 ma ora devi inserire il segno più o meno per assicurarti di non mancare eventuali soluzioni possibili. Inoltre, ricorda che in questo caso è tecnicamente X che può essere più o meno, non la radice quadrata di quattro.

Perché più tipi di ritorno sono noiosi da implementare. Se hai davvero bisogno dell'altro risultato, non è abbastanza semplice semplicemente moltiplicare il risultato per -1?

Perché la maggior parte dei programmatori desidera una sola risposta.

È abbastanza facile generare il valore negativo dal valore positivo se il chiamante lo desidera. Per la maggior parte del codice, il chiamante utilizza solo il valore positivo.


Tuttavia, al giorno d'oggi è facile restituire due valori in molte lingue. In JavaScript:

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

Fintanto che il chiamante sa di scorrere attraverso l'array che ritorna, sei oro.

>sqrts(2)
[1.4142135623730951, -1.4142135623730951]

Penso che perché la funzione si chiama " sqrt " ;, e se volevi più radici, dovresti chiamare la funzione " sqrts " ;, che non esiste, quindi non puoi farlo.

La risposta più seria è che stai suggerendo un'istanza specifica di un problema più grande. Molte equazioni e funzioni comunemente inverse (incluso sqrt) hanno molteplici possibili soluzioni, come arcsin, ecc. E queste sono, in generale, un problema. Con arcsin, ad esempio, si dovrebbe restituire un numero infinito di risposte? Vedi, ad esempio, discussioni su tagli di rami .

Perché è stata storicamente definita {{citazione necessaria}} come la funzione che fornisce la lunghezza laterale di un quadrato di superficie nota. E la lunghezza è positiva in quel contesto.

puoi sempre dire qual è l'altro numero, quindi forse non è necessario restituirli entrambi.

È probabile perché quando le persone usano una calcolatrice per capire una radice quadrata, vogliono solo il valore positivo.

Fai un ulteriore passo e chiedi perché la tua calcolatrice non ti permetterà di prendere la radice quadrata di un numero negativo. È possibile, usando numeri immaginari, ma l'utente medio ne ha assolutamente zero.

Su numeri immaginari.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top