20

コードで行う計算でこの問題に遭遇しました。除数も0の場合、除数は0です。私のコードでは、その場合は 0 を返します。ゼロ除算は一般的に定義されていませんが、この場合の例外を作成しないのはなぜですか? ゼロ除算が定義されていない理由は、基本的には元に戻すことができないということです。ただし、ケース 0/0 ではこの問題は見られません。

編集OKなので、この質問は多くの議論を引き起こしました。多くの票を獲得したという事実に基づいて、熱心に回答を受け入れるという過ちを犯しました。問題を分析する方法についてのアイデアを提供するため、AakashM の回答を受け入れました。

4

18 に答える 18

76

まあ言ってみれば:

0/0 = x

ここで、式を並べ替える (両辺に 0 を掛ける) と、次のようになります。

x * 0 = 0

今、あなたは問題を見ますか?0 を掛けると 0 になるため、x の値は無数にあります。

于 2010-07-13T11:09:39.237 に答える
58

これはプログラミングではなく数学ですが、簡単に言えば:

  • some-strictly-positive-quantity / 0極限が明確に定義されているため、正の無限大の「値」を に割り当てることは、ある意味で正当化されます。

  • x / yただし、 asxy両方の制限は、それらがたどるパスによって異なります。たとえば、lim (x -> 0) 2x / xは明らかに 2 ですが、lim (x -> 0) x / 5xは明らかに 1/5 です。限界の数学的定義では、限界までたどる経路が何であれ同じである必要があります。

于 2010-07-13T11:11:43.770 に答える
19

(Tony Breyal のかなり良い回答に触発されて、自分の回答を投稿しました)

ゼロはトリッキーで微妙な獣です - それは私たちが知っている通常の代数の法則に準拠していません。

ゼロを任意の数 (ゼロ自体を除く) で割った値はゼロです。もっと数学的に言えば:

 0/n = 0      for all non-zero numbers n.

ゼロ自体で除算しようとすると、トリッキーな領域に入ります。0 で割った数値が常に未定義であるというのは正しくありません。問題によって異なります。数値 0/0が定義されている微積分の例を示します。

f(x) と g(x) という 2 つの関数があるとします。その商 f(x)/g(x) を取ると、別の関数が得られます。これを h(x) としましょう。

また、関数の制限を取ることもできます。たとえば、x が 2 になるときの関数 f(x) の極限は、関数が 2 に近づく x を受け取るときに最も近くなる値です。この極限は次のように記述します。

 lim{x->2} f(x) 

これはかなり直感的な概念です。関数のグラフを描き、それに沿って鉛筆を動かしてください。x の値が 2 に近づくにつれて、関数がどこに行くかを確認します。

次に、例を示します。させて:

 f(x) = 2x - 2
 g(x) = x - 1

そしてそれらの商を考えます:

 h(x) = f(x)/g(x)

lim{x->1} h(x) が必要な場合はどうなるでしょうか? と言う定理があります。

 lim{x->1} h(x) = lim{x->1} f(x) / g(x) 
                = (lim{x->1} f(x)) / (lim{x->1} g(x))  
                = (lim{x->1} 2x-2) / (lim{x->1} x-1)
                =~ [2*(1) - 2] / [(1) - 1]  # informally speaking...
                = 0 / 0 
                  (!!!)

したがって、次のようになります。

 lim{x->1} h(x) = 0/0

しかし、ロピタルの法則と呼ばれる別の定理を使用することができます。これは、この極限も 2 に等しいことを示しています。したがって、この場合、0/0 = 2 (これは奇妙な獣だと言いませんでしたか?)

ここで、0 に関するもう 1 つの奇妙な点があります。0/0 は、それ自体で割ったものはすべて 1 であるという古い代数規則に従っているとしましょう。次に、次の証明を行うことができます。

次のことが与えられます。

 0/0 = 1

ここで、両辺に任意の数 n を掛けます。

 n * (0/0) = n * 1

両辺を簡約する:

 (n*0)/0 = n 
 (0/0) = n 

ここでも、0/0 = 1 という仮定を使用します。

 1 = n 

これで、他のすべての数 n が 1 に等しいことが証明されました。したがって、0/0 は 1 と等しくなりません。

mathoverflow.com にある彼女の家に戻ります。

于 2010-07-14T09:09:59.630 に答える
5

完全な説明は次のとおりです。

http://en.wikipedia.org/wiki/Division_by_zero

( 1 = 2 であることの証明を含む :-) )

通常、プログラミングで if ステートメントを使用してこれに対処し、アプリケーションに必要な動作を取得します。

于 2010-07-13T11:11:14.410 に答える
4

問題は分母にあります。分子は事実上無関係です。

10 / n
10 / 1 = 10
10 / 0.1 = 100
10 / 0.001 = 1,000
10 / 0.0001 = 10,000
Therefore: 10 / 0 = infinity (in the limit as n reaches 0)

パターンは、n が小さくなるほど結果が大きくなるというものです。n = 0 では、結果は無限大になり、不安定または非固定点になります。無限大を数字として書き留めることはできません。そうではないからです。それは増え続ける数の概念です。

それ以外の場合は、対数の法則を使用して数学的に考えることができ、方程式全体から除算を行うことができます。

    log(0/0) = log(0) - log(0)

しかし

    log(0) = -infinity

繰り返しますが、問題は結果が定義されていないことです。これは概念であり、入力できる数値ではないためです。

以上のことをすべて述べた上で、不確定形を確定形に変換する方法に興味がある場合は、ロピタルの規則を調べてください。

f(x) / g(x) = f'(x) / g'(x)

極限が存在すると仮定すると、不安定点ではなく固定点である結果を得ることができます。

それが少し役立つことを願って、

トニー・ブレイアル

ログの規則を使用する PS は、多くの場合、マシンの浮動小数点値の精度が与えられた場合にゼロと見分けがつかないほど非常に小さい数値になる操作を実行する際の問題を回避するための優れた計算方法です。実用的なプログラミングの例は、ソリューションを安定に保つために一般的にログを使用する必要がある「最大可能性」です。

于 2010-07-13T11:57:22.120 に答える
3

割り算を逆に見てみましょう。a/b = c の場合、c*b = a です。ここで、a=b=0 を代入すると、c*0 = 0 になります。しかし、ANYTHING に 0 を掛けると 0 になるため、結果は何でもかまいません。あなたは 0/0 を 0 にしたいと思いますが、他の誰かはそれを 1 にしたいと思うかもしれません (たとえば、x が 0 に近づくと、sin(x)/x の限界値は 1 になります)。したがって、最善の解決策は、未定義のままにしてエラーを報告することです。

于 2010-07-13T11:09:50.997 に答える
2

James Anderson 博士のTransarithmeticに関する研究を参照してください。それは広く受け入れられていません。

Transarithmetic は、0/0 の値を取る用語/数値「無効」を導入します。James は、これを「i」と「j」の導入に例えています。

于 2011-03-10T10:07:03.333 に答える
2

現代数学の構造は、公理の観点から考える数学者によって設定されています。生産的ではなく、実際にはより多くのことを行うことを許可しない追加の公理を持つことは、明確な数学を持つという理想に反します。

于 2010-07-13T11:17:46.360 に答える
1

なぜ0/0未定義であるかについての別の説明は、次のように書くことができるということです。

0/0 = (4 - 4)/0 = 4/0 - 4/0

そして4/0、未定義です。

于 2010-07-13T12:34:48.143 に答える
1

0 は何回 0 になりますか? 5. はい - 5 * 0 = 0、11. はい - 11 * 0 = 0、43. はい - 43 * 0 = 0。:)

于 2010-07-13T11:10:55.223 に答える
1

x/y=zは と同等である必要がx=yzあり、いずれかzが を満たすため、0=0zそのような「例外」はどのように役立ちますか?

于 2010-07-13T11:11:15.330 に答える
0

a/b = c の場合、a = b * c です。a=0 および b=0 の場合、c のすべての可能な値に対して 0 * c = 0 が真になるため、c はどのようなものでもかまいません。したがって、0/0 は未定義です。

于 2010-07-13T11:11:18.810 に答える
0

これは論理的な答えであり、数学的な答えではありません。ゼロを空として想像してみてください。空を空で割るにはどうすればよいですか。これは、ゼロで割る場合にも当てはまります。

于 2011-04-23T18:41:16.597 に答える
0

0 は何も意味しないので、何も持っていなくても、何にでも配布するという意味ではありません。一部の交通機関では、特定の路線のトリップ数をリストする場合、トリップ番号 0 は通常、別の方法でルーティングされる特別なルートです。典型的な例としては、トーランス トランジット システムで 2 号線が平日のみ運行するトリップ番号 0 として知られる最初のトリップの前にトリップを持っている場合があります。特に、そのトリップはルーティングされる特殊なルートであるため、トリップ番号 0 です。他のすべてのルートとは異なります。

詳細については、次の Web ページを参照してください。 http://transit.torrnet.com/PDF/Line-2_MAP.pdf http://transit.torrnet.com/PDF/Line-2_Time_PDF.pdf

マップ上で、トリップ番号 0 は点線でマッピングされたトリップであり、実線は通常のルートをマッピングしています。

場合によっては、「エクスプレス サービス」ルートと見なされる場合に、ルートが通過するトリップの番号付けに 0 を使用できます。

于 2012-10-03T07:51:07.577 に答える
-1

これは私がすることです:

function div(a, b) {
    if(b === 0 && a !== 0) {
        return undefined;
    }
    if(b === 0 && a === 0) {
        return Math.random;
    }
    return a/b;
}
于 2010-07-23T06:39:39.667 に答える
-1

0 を 0 で割った値を入力するとエラーが発生します。なぜなら、0 を掛けたものは何でも 0 になるため、任意の数になる可能性があるからです。

于 2016-03-09T18:49:05.520 に答える
-1

この場合の例外を設けないのはなぜですか?

なぜなら:

  • 他の人が言ったように、それはそれほど簡単ではありません;)
  • 0/0 を定義するためのアプリケーションはありません。例外を追加すると、数学が複雑になり、利益が得られません。
于 2010-07-13T11:35:36.797 に答える
-7

アンジェイ・ドイルが言ったように:

ゼロで割ったものは無限大です。0/0 も無限大です。0/0 = 1 はありません。これが数学の基本原理です。そうやって世界は回っている。しかし、携帯電話で言うように、「0/0 はありえない」または「0 で割ることはできない」とプログラムを編集することはできます。

于 2010-07-13T11:43:46.980 に答える