不同的编程语言如何处理除以0?

时间:2010-03-05 17:58:05

标签: division divide-by-zero

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

10 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:3)

INTERCAL标准库在除以零时返回#0

答案 2 :(得分:1)

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

在Delphi中,如果它在运行时发生,则抛出编译时错误(如果除以0值const)或者捕获运行时错误。

C和C ++也是如此。

在PHP中,您会收到警告:

  

警告:除以零   < file.php> 在线 X

所以,在PHP中,类似于:

$i = 123 / 0;

$ i将被设置为空。 但是 $ i不是=== NULL且isset($ i)返回true而is_string($ i)返回false。

答案 5 :(得分:0)

来自Wikipedia

扩展实数行的无穷大可以用IEEE浮点数据类型表示,就像普通的浮点值(如1,1.5等)一样。它们不是任何方式的错误值,尽管它们通常是(但是并不总是,因为它取决于舍入)当溢出时用作替换值。在除以零的异常时,将返回正或负无穷大作为精确结果。

答案 6 :(得分: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!

答案 7 :(得分:0)

答案 8 :(得分:0)

根据IEEE定义常量NaN等的浮点数。任何涉及该值的连续操作将保持不变直到结束。整数或整数不同,抛出异常...在java ...

答案 9 :(得分:-2)

我正在使用多面体,并试图选择一种喜欢inf的语言。 多面体{a,b}的总边,其中a是每个多边形的边,b是每个角的边是 E = 1 /(1 / a + 1 / b-1/2)

如果E为负,则为负曲率,但如果E为无穷大(1/0),则它将平铺该平面。示例:{3,6} {4,4}