为什么0除以0是错误的?

Bjö*_*lex 20 math division divide-by-zero

我在我的代码中进行的计算中遇到了这个问题,如果divident也为0,则除数为0.在我的代码中,我返回0表示该情况.我想知道,虽然除零通常是未定义的,为什么不对这种情况作出例外?我理解为什么除零是不确定的基本上是它无法逆转.但是,在0/0的情况下我没有看到这个问题.

编辑好了,所以这个问题产生了很多讨论.我犯了一个错误,就是因为它得到了很多选票而过于急切地接受了答案.我现在接受了AakashM的答案,因为它提供了如何分析问题的想法.

Yac*_*oby 77

让我们说:

0/0 = x
Run Code Online (Sandbox Code Playgroud)

现在,重新排列等式(将两边乘以0)得出:

x * 0 = 0
Run Code Online (Sandbox Code Playgroud)

现在你看到了问题吗?x的值无穷多,因为任何乘以0的值都是0.

  • 多重0有一个明确的结果...... 0.这是很多数学的基础. (12认同)
  • @josefx:这太不可思议了.将数字乘以0始终是明确定义的,其值为0.这是任何环中0的基本属性.对于任何x,x*0 = 0.我不敢相信你在争论这件事. (10认同)
  • @josefx.如果你从1 = 2开始,就可以证明你想要的任何东西.您不能将它用作不能乘以0的参数的基础.无论如何,请查看[Wikipedia](http://en.wikipedia.org/wiki/Multiplication#Properties) (4认同)
  • 总之,乘以0有一个明确定义的结果.0. (4认同)
  • @josefx:嗯,你是否意识到你说的是Yacoby的原始答案所说的一样的话?对于任何x,x*0(= y*0)= 0,这是我们不希望将0/0定义为0的一个原因.乘以0不会引入任何无效结果; 这是你的推论,"x*0 = y*0 => x = y"是错误的:这个错误的推理涉及除以0. (4认同)
  • 实际上,演示中的缺陷是你无法重新排列这个等式.你有'x = 0/0`.将两边乘以0,得到`x*0 = 0/0*0`.你不能简化正确的术语,因为它涉及将0除以0 ...或者,如果你只是说任何乘以0的数字给出0你的方程只是变成'0 = 0`.这就是为什么这个演示不成立的原因. (4认同)
  • @Yacoby:据我所知`(a/b)*b = a`没有定义为'a = b = 0`,但我不是数学家,所以我可能错了. (3认同)
  • 这里有一个很好的解释(http://mathforum.org/library/drmath/view/53093.html).我不敢相信我在争论这件事. (2认同)
  • @Yacoby:取消分母等于divinig并乘以1.当你说'2/3*3 = 2`时,你实际上是'2*3/3 = 2*1 = 2`.但是你不能将'0/0*0`简化为'0*1 = 0`:这意味着'0/0 = 1`. (2认同)

Aak*_*shM 58

这是数学而不是编程,但简要说明:

  • 从某种意义上讲,将正无穷大的"值"赋予是合理的some-strictly-positive-quantity / 0,因为限制是明确定义的

  • 但是,x / yas xyboth 的极限趋向于零取决于它们采用的路径.例如,lim (x -> 0) 2x / x显然是2,而lim (x -> 0) x / 5x显然是1/5.限制的数学定义要求遵循限制的任何路径都是相同的.

  • 我见过的第一个答案+1代表了限制 (3认同)
  • @dmckee:这取决于具体的结果.要使用你的例子,如果你告诉某人在实际中,指数是一个有界函数并且无限正弦,你认为他们会接受结果,因为你说"它在C中工作,而R是C的一部分吗?" 一些结果可能仍然存在,0/0肯定是未定义的,但这并不意味着相同的证明都将起作用. (2认同)

Cla*_*ton 19

(受托尼·布兰亚(Tony Breyal)发自我自己的一个相当好的答案的启发)

零是一个棘手而微妙的野兽 - 它不符合我们所知道的代数的通常规律.

零除以任何数字(零除外)为零.更多数学:

 0/n = 0      for all non-zero numbers n.
Run Code Online (Sandbox Code Playgroud)

当你试图将零除以自己时,你会陷入棘手的境界.除以0的数字总是未定义的,这是不正确的.这取决于问题.我将从微积分中给出一个例子,其中定义了数字0/0 .

假设我们有两个函数,f(x)和g(x).如果你取他们的商,f(x)/ g(x),你得到另一个函数.我们称之为h(x).

您还可以限制功能.例如,函数f(x)的限制为x变为2是函数最接近的值,因为它接近x的x.我们将此限制写为:

 lim{x->2} f(x) 
Run Code Online (Sandbox Code Playgroud)

这是一个非常直观的概念.只需绘制您的功能图表,然后沿着它移动铅笔.当x值接近2时,请查看函数的位置.

现在我们的例子.让:

 f(x) = 2x - 2
 g(x) = x - 1
Run Code Online (Sandbox Code Playgroud)

并考虑他们的商:

 h(x) = f(x)/g(x)
Run Code Online (Sandbox Code Playgroud)

如果我们想要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 
                  (!!!)
Run Code Online (Sandbox Code Playgroud)

所以我们现在有:

 lim{x->1} h(x) = 0/0
Run Code Online (Sandbox Code Playgroud)

但我可以使用另一个定义,称为l'Hopital规则,它告诉我这个限制也等于2.所以在这种情况下,0/0 = 2(我不是告诉你这是一个奇怪的野兽吗?)

这是0的另一点奇怪.让我们说0/0遵循旧的代数规则,任何除以它的东西都是1.然后你可以做以下证明:

我们得到了:

 0/0 = 1
Run Code Online (Sandbox Code Playgroud)

现在将两边乘以任意数n.

 n * (0/0) = n * 1
Run Code Online (Sandbox Code Playgroud)

简化双方:

 (n*0)/0 = n 
 (0/0) = n 
Run Code Online (Sandbox Code Playgroud)

再次,使用0/0 = 1的假设:

 1 = n 
Run Code Online (Sandbox Code Playgroud)

所以我们只是证明了所有其他数字n都等于1!所以0/0不能等于1.

在mathoverflow.com上回到她的家


tov*_*are 5

这是一个完整的解释:

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

(包括证明1 = 2 :-))

您通常使用if语句在编程中处理此问题,以获得应用程序所需的行为.


Ton*_*yal 5

问题在于分母.分子实际上是无关紧要的.

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)
Run Code Online (Sandbox Code Playgroud)

模式是随着n变小,结果变得更大.在n = 0时,结果是无穷大,这是一个不稳定或非固定的点.你不能把无穷大写成一个数字,因为它不是,是一个不断增加的数字的概念.

否则,您可以使用对数定律在数学上考虑它,从而将等式划分为等式:

    log(0/0) = log(0) - log(0)
Run Code Online (Sandbox Code Playgroud)

    log(0) = -infinity
Run Code Online (Sandbox Code Playgroud)

同样,问题是结果是未定义的,因为它是一个概念,而不是您可以输入的数字.

说完这一切之后,如果你对如何将一个不确定的形式变成一个确定的形式感兴趣,请查看l'Hopital的规则,它有效地说:

f(x) / g(x) = f'(x) / g'(x)
Run Code Online (Sandbox Code Playgroud)

假设存在限制,因此您可以得到一个固定点而不是不稳定点的结果.

希望有所帮助,

Tony Breyal

使用日志规则的PS通常是一种很好的计算方法,可以解决执行操作的问题,这些操作导致数量如此微小,以至于给定机器浮点值的精度,与零无法区分.实际编程示例是"最大可能性",其通常必须利用日志以保持解决方案稳定