Question

La plupart des langages de programmation donnent 2 comme réponse à la racine carrée de 4 . Cependant, il existe deux réponses: 2 et -2 . Existe-t-il une raison particulière, historique ou autre, pour laquelle une seule réponse est généralement donnée?

Était-ce utile?

La solution

Parce que:

  • En mathématiques, & # 8730; x désigne généralement, sauf indication contraire, la racine principale (c.-à-d. positive) de x [ http://mathworld.wolfram.com/SquareRoot.html] .
  • Certaines langues ne permettent pas de renvoyer plusieurs valeurs.
  • Puisque vous pouvez simplement appliquer la négation, renvoyer les deux serait redondant.

Autres conseils

Si la méthode de la racine carrée donnait deux valeurs, l’une de ces deux valeurs serait pratiquement toujours ignorée. En plus de gaspiller de la mémoire et de la complexité avec la valeur de retour supplémentaire, elle serait peu utilisée. Tout le monde sait que vous pouvez multiplier la réponse renvoyée par -1 et obtenir l'autre racine.

Je m'attends à ce que seuls les langages mathématiques renvoient plusieurs valeurs ici, peut-être sous forme de tableau ou de matrice. Mais pour la plupart des langages de programmation à usage général, le gain à effectuer et le coût non négligeable à réaliser sont tels que vous le suggérez.

Quelques réflexions:

  • Historiquement, les fonctions étaient définies comme des procédures renvoyant une valeur unique .

  • Il aurait été fastidieux (en utilisant des constructions de programmation primitives) de définir une fonction propre qui renvoie plusieurs valeurs comme ceci.

  • Il y a toujours des exceptions à la règle:

    • 0, par exemple, n'a qu'une racine unique (0).
    • Vous ne pouvez pas prendre la racine carrée d'un nombre négatif (sauf si la langue prend en charge les nombres complexes). Cela pourrait être traité comme une exception (comme "diviser par 0") dans les langues qui ne prennent pas en charge les nombres imaginaires ou le système de numération complexe.
  • Il est généralement simple de déduire les 2 racines carrées (nier simplement la valeur renvoyée par la fonction). Cela a probablement été laissé comme exercice par l'appelant de la fonction sqrt (), si leur domaine dépendait du traitement des racines positives (+) et négatives (-).

Il est plus facile de renvoyer un numéro que d'en renvoyer deux. La plupart des décisions techniques sont prises de cette manière.

Il existe de nombreuses fonctions qui ne renvoient qu'une réponse sur 2 possibilités ou plus. Arc tangent par exemple. L'arc tangente de 1 est renvoyée sous forme de 45 degrés, mais elle pourrait également être de 225 ou même de 405. Comme pour beaucoup de choses dans la vie et la programmation, il existe une convention sur laquelle nous pouvons compter. Les fonctions de racine carrée qui renvoient des valeurs positives en font partie. Il appartient à nous, programmeurs, de garder à l’esprit les autres solutions et d’agir sur celles-ci au besoin en code.

Soit dit en passant, il s’agit d’un problème courant en robotique lorsqu’il s’agit d’équations cinématiques et d’équations cinématiques inverses où il existe plusieurs solutions de positions de liens correspondant à des positions cartésiennes.

En mathématiques, par convention, on suppose toujours que vous voulez la racine carrée positive de quelque chose, à moins d'indication explicite du contraire. La racine carrée de quatre est vraiment deux. Si vous voulez la réponse négative, mettez un signe négatif devant. Si vous voulez les deux, mettez le signe plus ou moins. Sans cette convention, il serait impossible d'écrire des équations. vous ne sauriez jamais ce que la personne avait l'intention même si elle mettait un signe devant (parce que cela pourrait être le négatif de la racine carrée négative, par exemple). Aussi, comment écririez-vous exactement un type de code informatique impliquant des mathématiques si les opérateurs commençaient à renvoyer deux valeurs? Cela casserait tout.

L'exception malheureuse à cette convention concerne la résolution de variables. Dans l'équation suivante:

x ^ 2 = 4

Vous n'avez pas d'autre choix que de considérer les deux valeurs possibles pour X. Si vous prenez la racine carrée des deux côtés, vous obtenez x = 2, mais vous devez maintenant insérer le signe plus ou moins pour vous assurer de ne pas manquer. toutes les solutions possibles. De plus, rappelez-vous que dans ce cas, techniquement, X peut être plus ou moins, et non la racine carrée de quatre.

Parce que plusieurs types de retour sont ennuyeux à implémenter. Si vous avez vraiment besoin de l'autre résultat, n'est-il pas assez facile de simplement multiplier le résultat par -1?

Parce que la plupart des programmeurs veulent seulement une réponse.

Il est assez facile de générer la valeur négative à partir de la valeur positive si l'appelant le souhaite. Pour la plupart des codes, l'appelant utilise uniquement la valeur positive.

Cependant, de nos jours, il est facile de renvoyer deux valeurs dans plusieurs langues. En JavaScript:

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

Tant que l'appelant sait qu'il faut parcourir le tableau qui revient, vous êtes or.

>sqrts(2)
[1.4142135623730951, -1.4142135623730951]

Je pense que la fonction s'appelle "sqrt" et que, si vous vouliez plusieurs racines, vous devriez appeler la fonction "sqrts", qui n'existe pas, vous ne pouvez donc pas le faire.

La réponse la plus grave est que vous suggérez un cas spécifique d’un problème plus vaste. De nombreuses équations, et généralement des fonctions inverses (y compris sqrt) ont de multiples solutions possibles, telles que arcsin, etc., et elles posent généralement problème. Avec arcsin, par exemple, faut-il retourner un nombre infini de réponses? Voir, par exemple, des discussions sur les coupures de branches .

Parce qu’il était défini historiquement {{citation required}} comme étant la fonction qui donne la longueur des côtés d’un carré de surface connue. Et la longueur est positive dans ce contexte.

vous pouvez toujours dire quel est l'autre numéro, alors il n'est peut-être pas nécessaire de les renvoyer tous les deux.

C'est probablement parce que lorsque les gens utilisent une calculatrice pour trouver une racine carrée, ils ne veulent que la valeur positive.

Allez un peu plus loin et demandez pourquoi votre calculatrice ne vous laisse pas prendre la racine carrée d’un nombre négatif. C'est possible, en utilisant des nombres imaginaires, mais l'utilisateur moyen n'a absolument aucune utilisation pour cela.

Sur des nombres imaginaires.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top