Math 为什么0除以0是一个错误?
我在代码中的计算中遇到了这个问题,如果divident也为0,则除数为0。在我的代码中,对于这种情况,我返回0。我想知道,虽然被零除通常是未定义的,为什么不为这种情况破例呢?我的理解是,为什么被零除是未定义的,基本上是因为它不能被逆转。但是,在0/0的情况下,我看不到这个问题 编辑好的,所以这个问题引发了很多讨论。我犯了一个错误,因为得到了很多选票,所以我过于急切地接受了一个答案。我现在接受了,因为它提供了一个如何分析问题的想法。比方说:Math 为什么0除以0是一个错误?,math,division,divide-by-zero,Math,Division,Divide By Zero,我在代码中的计算中遇到了这个问题,如果divident也为0,则除数为0。在我的代码中,对于这种情况,我返回0。我想知道,虽然被零除通常是未定义的,为什么不为这种情况破例呢?我的理解是,为什么被零除是未定义的,基本上是因为它不能被逆转。但是,在0/0的情况下,我看不到这个问题 编辑好的,所以这个问题引发了很多讨论。我犯了一个错误,因为得到了很多选票,所以我过于急切地接受了一个答案。我现在接受了,因为它提供了一个如何分析问题的想法。比方说: 0/0 = x 现在,重新排列方程式(两边乘以0)得出
0/0 = x
现在,重新排列方程式(两边乘以0)得出:
现在你看到问题了吗?x有无限多个值,因为任何乘以0的值都是0。反过来看除法:如果a/b=c,那么c*b=a。现在,如果你替换a=b=0,你会得到c*0=0。但是任何乘以零的东西都等于零,所以结果可以是任何东西。您希望0/0为0,其他人可能希望它为1(例如,当x接近0时,sin(x)/x的极限值为1)。因此,最好的解决方案是不定义它并报告错误。0进入0的次数是多少?5.是-5*0=0,11。是-11*0=0,43。是-43*0=0。也许你现在可以明白为什么它没有定义了?:) 这里有一个完整的解释: (包括1=2:-)的证明)
在编程中,您通常通过使用if语句来获得应用程序所需的行为来处理此问题。既然
x/y=z
应等同于x=yz
,并且任何z
都将满足0=0z
,这样的“异常”有多大用处 如果a/b=c,那么a=b*c。
在a=0和b=0的情况下,c可以是任何值,因为对于c的所有可能值,0*c=0都是真的。因此,0/0是未定义的。这是数学而不是编程,但简单地说:
- 从某种意义上讲,将一个正无穷大的“值”分配给某个严格的正数量/0是有道理的,因为这个极限是明确定义的
- 然而,
和x/y
的极限都趋向于零,这取决于它们所走的路径。例如,y
显然是2,而lim(x->0)2x/x
显然是1/5。极限的数学定义要求它与通向极限的任何路径相同lim(x->0)x/5x
- 正如其他人所说,这并不容易;)李>
- 没有定义0/0的应用程序-添加异常将使数学变得复杂,但没有任何好处
- 现代数学的结构是由按照公理思考的数学家设定的。
有额外的公理是没有效率的,并且不允许一个人做更多的事情,这与拥有清晰的数学是背道而驰的
为什么不破例呢
案子
因为:
任何除以零的东西都是无穷大。0/0也是无穷大。你不能得到0/0=1。这是数学的基本原理。这就是整个世界的运转方式。但是你可以编辑一个程序,说“0/0不可能”或“不能被零除”,就像手机里说的那样。问题在于分母。分子实际上是无关的
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)
但是
同样,问题是结果是未定义的,因为它是一个概念,而不是您可以输入的数字
说到这里,如果你对如何将一个不确定的形式变成一个确定的形式感兴趣,请查阅l'Hopital的规则,它有效地说:
f(x) / g(x) = f'(x) / g'(x)
假设极限存在,因此可以得到一个固定点而不是不稳定点的结果
希望对你有点帮助
托尼·布雷亚尔
另外,使用日志规则通常是一种很好的计算方法,可以避免执行操作时出现的问题,这些操作会导致数字非常小,以至于在给定机器浮点值精度的情况下,无法将数字与零区分开来。实际编程示例是“最大可能性”,它通常必须使用日志来保持解决方案的稳定性另一种解释是为什么
0/0
未定义,您可以编写:
0/0 = (4 - 4)/0 = 4/0 - 4/0
而且4/0
是未定义的。(受托尼·布雷亚尔(Tony Breyal)对我自己的一篇文章的相当好的回答启发)
零是一种狡猾而微妙的野兽——它不符合我们所知道的代数定律
零除以任何数字(零本身除外)即为零。更精确地说:
0/n = 0 for all non-zero numbers n.
当你试图将自己除以零时,你就进入了一个棘手的领域。一个数字除以0并不总是未定义的。这取决于问题。我将给你们一个微积分的例子,其中定义了数字0/0
假设我们有两个函数,f(x)和g(x)。如果你取他们的商f(x)/g(x),你会得到另一个函数。我们称之为h(x)
您还可以接受函数的限制。例如,函数f(x)在x变为2时的极限是函数在x接近2时最接近的值。我们将该限额写为:
lim{x->2} f(x)
这是一个非常直观的概念。只要画一张函数图,然后把铅笔沿着它移动。当x值接近2时,请查看函数的位置
现在我们来举个例子。乐
0/n = 0 for all non-zero numbers n.
lim{x->2} f(x)
f(x) = 2x - 2
g(x) = x - 1
h(x) = f(x)/g(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
0/0 = 1
n * (0/0) = n * 1
(n*0)/0 = n
(0/0) = n
1 = n
function div(a, b) {
if(b === 0 && a !== 0) {
return undefined;
}
if(b === 0 && a === 0) {
return Math.random;
}
return a/b;
}