4

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

4

11 回答 11

4

当您在 IEEE 浮点上下文中除以零时,鲜为人知的Java 编程语言会给出特殊常量Double.POSITIVE_INFINITY或(取决于分子)。Double.NEGATIVE_INFINITY整数除以零是未定义的,并且会导致ArithmeticException被抛出,这与您的“爆炸和失败”场景完全不同。

于 2010-03-05T18:04:05.670 回答
3

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

于 2010-03-05T18:15:39.723 回答
1

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

于 2010-03-05T18:03:38.873 回答
0

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

于 2010-03-05T18:03:36.330 回答
0

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

C 和 C++ 也是如此。

在 PHP 中,您将收到警告:

警告: 在第X行的<file.php>中除以零

所以,在 PHP 中,对于类似的东西:

$i = 123 / 0;

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

于 2010-03-05T18:08:03.763 回答
0

来自维基百科

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

于 2010-03-05T19:17:22.360 回答
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!
于 2010-03-05T19:26:04.267 回答
0

大多数 SQL 实现都会引发“除以零”错误,但 MySQL 只返回 NULL

于 2010-07-10T07:17:26.650 回答
0

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

于 2010-07-10T07:24:26.997 回答
0

在小马除以 0 是 0 但我还没有找到 0/0 是 1 的语言

于 2021-10-07T17:53:20.097 回答
-2

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

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

于 2018-09-21T16:36:27.787 回答