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.
Aak*_*shM 58
这是数学而不是编程,但简要说明:
从某种意义上讲,将正无穷大的"值"赋予是合理的some-strictly-positive-quantity / 0
,因为限制是明确定义的
但是,x / y
as x
和y
both 的极限趋向于零取决于它们采用的路径.例如,lim (x -> 0) 2x / x
显然是2,而lim (x -> 0) x / 5x
显然是1/5.限制的数学定义要求遵循限制的任何路径都是相同的.
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上回到她的家
这是一个完整的解释:
http://en.wikipedia.org/wiki/Division_by_zero
(包括证明1 = 2 :-))
您通常使用if语句在编程中处理此问题,以获得应用程序所需的行为.
问题在于分母.分子实际上是无关紧要的.
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通常是一种很好的计算方法,可以解决执行操作的问题,这些操作导致数量如此微小,以至于给定机器浮点值的精度,与零无法区分.实际编程示例是"最大可能性",其通常必须利用日志以保持解决方案稳定
归档时间: |
|
查看次数: |
8249 次 |
最近记录: |