也许这是一个错误的问题,但我很好奇。我知道当被要求除以 0 时,许多语言会简单地爆炸并失败,但是有没有任何编程语言可以智能地处理这个不可能的总和 - 如果是这样,它们会做什么?他们是继续处理,将 350/0 视为 350,还是停止执行,还是什么?
11 回答
当您在 IEEE 浮点上下文中除以零时,鲜为人知的Java 编程语言会给出特殊常量Double.POSITIVE_INFINITY
或(取决于分子)。Double.NEGATIVE_INFINITY
整数除以零是未定义的,并且会导致ArithmeticException
被抛出,这与您的“爆炸和失败”场景完全不同。
INTERCAL标准库在#0
除以零时返回
在 Java 中,浮点上下文中除以零会产生特殊值Double.POSITIVE_INFINITY
or Double.NEGATIVE_INFINITY
。
如果您执行 350/0,如果任何语言返回 350,我会感到惊讶。只是两个例子,但是 Java 抛出了一个可以被捕获的异常。C/C++ 只是崩溃(我认为它会抛出一个可能被捕获的信号)。
在 Delphi 中,它要么抛出编译时错误(如果除以 0 值 const),要么抛出可捕获的运行时错误(如果它发生在运行时)。
C 和 C++ 也是如此。
在 PHP 中,您将收到警告:
警告: 在第X行的<file.php>中除以零
所以,在 PHP 中,对于类似的东西:
$i = 123 / 0;
$i 将被设置为空。但是$i 不是 === NULL 并且 isset($i) 返回 true 而 is_string($i) 返回 false。
来自维基百科:
扩展实数线的无穷大可以用 IEEE 浮点数据类型表示,就像普通的浮点值(如 1、1.5 等)一样。它们在任何方面都不是错误值,尽管它们经常(但并非总是如此,因为这取决于在四舍五入时)用作溢出时的替换值。在除以零异常时,正或负无穷大作为精确结果返回。
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!
浮点数根据 IEEE 定义常量 NaN 等。任何涉及 thst 值的持续操作将保持不变,直到结束。整数或整数与抛出异常不同......在java中......
在小马除以 0 是 0 但我还没有找到 0/0 是 1 的语言
我正在使用多面体并尝试选择一种喜欢 inf 的语言。多面体 {a,b} 的总边数,其中 a 是每个多边形的边,b 是每个角的边 E = 1/(1/a + 1/b - 1/2)
如果 E 为负,则为负曲率,但如果 E 为无穷大(1/0),则将平面平铺。示例:{3,6} {4,4}