【问题标题】:Why is it possible to divide 0 by 0D but not by 0? [duplicate]为什么可以将 0 除以 0D 而不能除以 0? [复制]
【发布时间】:2020-01-08 02:05:30
【问题描述】:

我想知道为什么

0D / 0D 

输出NaN不是数字),但是

0 / 0 

甚至无法编译由于DivideByZeroException

【问题讨论】:

  • 0/0 划分两个ints,而不是doubles; int 没有任何 NaN
  • 您的问题的小问题,但在编译时不会发生“异常”,它们只是运行时。
  • 编译器不会抛出DivideByZeroException(异常发生在运行时)。你看到的是像Compilation error (line 8, col 11): Division by constant zero这样的编译器错误。

标签: c# integer double divide-by-zero


【解决方案1】:

嗯,

0 / 0

int除以int,因此结果应该是int; 因为int 没有任何特殊值,例如+INF-INFNaN 抛出异常 (DivideByZeroException) 是唯一的选择。 0 / 0 划分了两个常量,它们可以在编译时执行。

相反,如果

0d / 0d 

结果应该是double类型,其中特殊值可以很好地返回:

 1d / 0d = +INF (positive infinity)
-1d / 0d = -INF (negative infinity)
 0d / 0d =  NAN (math uncertainty; technically, result can be +/-INF or some finite number) 

在最后一种情况下,我们有不确定性;结果是undefined,我们得到NAN

【讨论】:

  • NaN 并不意味着它可以是“无穷大或有限数”。 NaN 表示结果只是未定义。
  • @Adrian:谢谢,我应该详细说明最后一个案例。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-09
  • 1970-01-01
  • 2011-06-12
  • 1970-01-01
  • 1970-01-01
  • 2015-05-29
相关资源
最近更新 更多