为什么C#允许在浮点types中将非零数字除以零?
为什么C#允许:
1.0 / 0 // Infinity
并且不允许:
1 / 0 // Division by constant zero [Compile time error]
从mathangular度来看,除以零之间的整数和浮点数之间是否有区别?
根据微软的说法,“浮点运算溢出或除零除了不会抛出一个exception,因为浮点types是基于IEEE 754的,所以它们有表示无穷大和NaN(非数字)的规定。
更多关于这里 。
在math上,没有区别。 但是,对于计算机,只有标准的IEEE-754浮点规范才具有表示±∞的特殊值。 整数只能保持…整数:-)
IEEE标准浮点运算 (IEEE 754)是浮点计算中使用最为广泛的标准,随后还有许多硬件和软件实现,包括C#编译器。
这意味着任何浮点variables都可以包含奇怪的生物,如PositiveInfinity,NegativeInfinity和Not-a-Number(简写为NaN)。 在IEEE 754algorithm规则下,任何这些非有限浮点值都可以通过某些操作生成。 例如,一个无效的浮点运算(例如零除零)将导致NaN。
在你的具体例子中,你可以看到C#(与VB不同)将/运算符重载为整数或浮点数。 这意味着编译器根据所使用的数字的types确定是进行整数运算还是浮点运算。
还有其他有趣的微妙之处 。 值得一读Eric Lippert关于这个主题的博客文章 。
IEEE754标准的浮点除法规定除零应为无穷大。 整数除法没有这样的标准,所以他们只是遵循math的标准规则。