15

ほとんどのプログラミング言語は2、 の平方根の答えとして与え4ます。ただし、答えは2との 2 つ-2です。歴史的またはその他の理由で、通常 1 つの答えしか与えられない特定の理由はありますか?

4

12 に答える 12

37

なぜなら:

  • 数学では、√<i>x は通常、特に明記しない限り、 xの主根 (正の根) を指します[ http://mathworld.wolfram.com/SquareRoot.html]
  • 一部の言語には、複数の値を返す機能がありません。
  • 否定を適用するだけなので、両方を返すのは冗長です。
于 2009-05-08T04:23:31.043 に答える
17

平方根メソッドが 2 つの値を返した場合、実際には、それら 2 つのうちの 1 つが常に破棄されます。追加の戻り値でメモリと複雑さが無駄になるだけでなく、ほとんど使用されません。-1によって返された答えを乗算して、もう一方のルートを取得できることは誰もが知っています。

おそらく配列または行列として、ここで複数の値を返すのは数学言語だけだと思います。しかし、ほとんどの汎用プログラミング言語では、あなたが提案するようにすることで、無視できる利益と無視できないコストがあります。

于 2009-05-08T04:26:54.513 に答える
12

いくつかの考え:

  • 歴史的に、関数は単一の値を返す手続きとして定義されていました。

  • このように複数の値を返すクリーンな関数を定義するのは、(原始的なプログラミング構造を使用して) 面倒なことでした。

  • 規則には常に例外があります。

    • たとえば、0 にはルート (0)が 1つしかありません。
    • 負の数の平方根を取ることはできません(言語が複素数をサポートしていない限り)。これは、虚数または複素数システムをサポートしていない言語では例外 (「0 による除算」など) として扱われる可能性があります。
  • 通常、2 つの平方根を推測するのは簡単です (単に関数によって返された値を否定するだけです)。ドメインが正 (+) および負 (-) ルートの両方の処理に依存している場合、これはおそらく sqrt() 関数の呼び出し元による演習として残されました。

于 2009-05-08T04:24:18.607 に答える
10

2 つの数値を返すよりも、1 つの数値を返す方が簡単です。ほとんどのエンジニアリング上の決定は、この方法で行われます。

于 2009-05-08T04:22:08.083 に答える
9

2 つ以上の可能性から 1 つの回答しか返さない関数が多数あります。たとえばアークタンジェント。1 の逆正接は 45 度として返されますが、225 または 405 になることもあります。生活やプログラミングの多くの場合と同様に、私たちが知っていて信頼できる規則があります。正の値を返す平方根関数もその 1 つです。他の解決策があることを念頭に置き、コードで必要に応じてそれらに対処するのは、私たちプログラマーの責任です。

ところで、これは、デカルト位置に対応するリンク位置の複数の解が存在する運動学および逆運動学方程式を扱う場合のロボット工学における一般的な問題です。

于 2009-06-26T19:31:57.090 に答える
8

数学では、慣例により、明示的に別のことを言わない限り、何かの正の平方根が必要であると常に想定されています。4 の平方根は実際には 2 です。否定的な答えが必要な場合は、前に否定記号を付けます。両方が必要な場合は、プラスまたはマイナス記号を付けます。この規則がなければ、方程式を書くことは不可能です。サインを前に置いたとしても、その人が何を意図していたのかは決してわかりません (たとえば、マイナスの平方根のマイナスになる可能性があるため)。また、演算子が 2 つの値を返し始めた場合、数学に関係するコンピューター コードをどのように正確に記述しますか? それはすべてを壊すでしょう。

この規則の残念な例外は、変数を解く場合です。次の式では:

x^2 = 4

X の両方の可能な値を考慮する以外に選択肢はありません。両辺の平方根を取ると、x = 2 になりますが、可能な解を見逃さないようにプラス記号またはマイナス記号を入力する必要があります。 . また、この場合、4 の平方根ではなく、技術的にプラスまたはマイナスのいずれかになるのは X であることを覚えておいてください。

于 2009-05-08T04:29:32.557 に答える
5

複数の戻り値の型は実装するのが面倒だからです。もう一方の結果が本当に必要な場合は、結果に -1 を掛けるだけで十分簡単ではありませんか?

于 2009-05-08T04:21:33.200 に答える
2

関数は「sqrt」と呼ばれ、複数のルートが必要な場合は、存在しない関数「sqrts」を呼び出さなければならないため、それはできないと思います。

より深刻な答えは、より大きな問題の特定のインスタンスを提案しているということです。多くの方程式、および一般的に逆関数 (sqrt を含む) には、逆正弦などの複数の可能な解があり、これらは一般的に問題です。たとえば、アークサインでは、無限の数の答えを返す必要がありますか? たとえば、ブランチ カットに関する議論を参照してください。

于 2009-05-08T04:54:45.680 に答える
2

それは歴史的に既知の面の正方形の一辺の長さを与える関数として定義されていたからです。そして、その文脈では長さは正です。

于 2010-08-03T12:29:59.683 に答える
1

これは、人々が電卓を使って平方根を計算するとき、正の値だけを求めているためと考えられます。

さらに一歩進んで、電卓で負の数の平方根をとれない理由を尋ねてください。虚数を使用することは可能ですが、平均的なユーザーはこれをまったく使用しません。

虚数について。

于 2009-05-08T04:31:08.950 に答える
1

もう一方の数字はいつでもわかるので、両方を返す必要はないかもしれません。

于 2009-05-08T04:21:02.860 に答える