2010-03-05 37 views
3

也许在这里问这是一个错误的问题,但我很好奇。我知道很多语言在被要求除以0时会简单地爆炸和失败,但是有没有任何编程语言可以智能地处理这个不可能的总和 - 如果是的话,它们是做什么的?他们是否继续处理,将350/0当作350,或者停止执行,或者是什么?不同的编程语言如何处理除以0?

+1

你在问语言或语言实现吗?并非所有的语言都规定了确切的行为,因此它因实施而异。 – 2010-03-05 18:16:35

+0

询问每种不同的语言如何处理场景。我收到了一些令人着迷的答案,只是对每种语言的作用感到好奇。 – Jack 2010-03-05 19:29:50

回答

0

Wikipedia

的扩展实数线的无穷大可在IEEE表示浮点数据类型,就像像普通浮点值1,1.5等。它们不是以任何方式出现的错误值,虽然它们通常(但不总是,因为它取决于舍入)在溢出时用作替换值。除以零例外时,正或负无穷大作为确切结果返回。

0

如果任何语言返回350,如果你做350/0,我会感到惊讶。仅举两个例子,但Java抛出一个可以被捕获的异常。 C/C++只是崩溃(我认为它会抛出一个可能被捕获的信号)。

+1

有两种不同的语言,称为C和C++,我不认为他们中的任何一个在他们的标准中都有特定的规定。一种或两种语言的某些实现可能会抛出信号。 – 2010-03-05 18:14:46

1

在Java中,在浮点上下文中除以零产生特殊值Double.POSITIVE_INFINITYDouble.NEGATIVE_INFINITY

+3

或'Double.NaN',如果你用零除零。 – mob 2010-03-05 18:05:35

4

鲜为人知的Java programming language给出了在IEEE浮点上下文中除以零时的特殊常数Double.POSITIVE_INFINITYDouble.NEGATIVE_INFINITY(取决于分子)。整数除以零是未定义的,并导致ArithmeticException被抛出,这与“爆炸和失败”情况完全不同。

+2

你如何双倍无限?这不就是给你无限吗?莫罗尼克的头脑想知道! – 2010-03-05 18:41:53

+0

另外,如果你加倍不是一个数字,这是否使它成为一个数字? – 2010-03-05 18:48:15

+0

@ T.E.D实际上,由于它们扩展的速度,有些无限大于其他,例如。 SUM(1..n)是一个小于SUM(1^2 ... n^2)的无穷大,因为n接近无穷大(这是与数学的限制相关) – 2010-07-13 18:32:09

0

在Delphi中,如果它在运行时发生,它会引发编译时错误(如果被0值const分开)或可捕获的运行时错误。

这对C和C++来说是一样的。

在PHP中,你会得到一个警告:

警告: <file.php>被零线X

因此,在PHP中,什么东西如:

$i = 123/0; 

$我将被设置为无。 但是 $ i不是=== NULL和isset($ i)返回true,is_string($ i)返回false。

+0

如果只有警告,那么表达式返回? – 2010-03-05 19:01:09

+0

更新的答案有更多的信息。 – AlexV 2010-03-05 19:14:26

0

Python(至少版本2,我没有3)抛出一个ZeroDivisionError,它可以被捕获。

num = 42 
try: 
    for divisor in (1,0): 
     ans = num/divisor 
     print ans 
except ZeroDivisionError: 
    print "Trying to divide by 0!" 

打印出:

42 
Trying to divide by 0! 
+0

版本3.1仍然会引发ZeroDivisionError。 – dan04 2010-03-21 05:35:32

0

浮点数具体根据IEEE定义的NaN常数等。任何涉及THST值将保持不变,直到结束继续进行操作。整数或整数与抛出的异常是不同的......在java中......