为什么int和decimal抛出DivideByZeroException而浮点数却没有?

use*_*573 6 c# dividebyzeroexception

根据http://msdn.microsoft.com/en-us/library/system.dividebyzeroexception.aspx, 只有Int和Decimal在将它们除以0时会抛出DivideByZeroException,但是当你将浮点除以0时,结果是无穷大,负无穷大或NaN.为什么是这样?结果是+ ve无穷大,-ve无穷大还是NaN的例子是什么?

Mic*_*tta 11

对于可能遇到浮点数学这类问题的代码范围,IEEE标准委员会认为异常处理比它的价值更麻烦:

陷阱可用于停止程序,但不可恢复的情况极为罕见.
[...]
Flags提供可预测的控制流量和速度.它们的使用要求程序员了解异常情况,但标志粘性允许程序员在必要时延迟处理异常情况.

对于习惯于异常处理的语言的开发人员来说,这可能看起来很奇怪,比如C#.IEEE 754标准的开发人员正在考虑更广泛的实现(例如,嵌入式系统),这些设施不可用,或者不可取.


Eri*_*ert 7

迈克尔的答案当然是正确的.这是另一种看待它的方式.

整数是准确的.当你用整数除七,你实际上问的问题是"在我必须进入负数之前,我可以从七减去三次?".除零是未定义的,因为没有多少次你可以从七中减去零以得到负面的东西.

漂浮物本质上是不精确的.它们具有一定的精度,您最好假设"实际"数量介于给定的浮点数和它附近的浮点数之间.此外,浮点数通常表示物理量,而那些浮点数的测量误差远大于表示误差.我认为浮点数是一个点周围的模糊模糊区域.

因此,当您在浮点数中将7除以零时,可以将其视为将某个数字合理地接近7除以合理接近零的某个数字.显然,一个合理接近零的数字可以使商数任意大!因此,通过给予无限作为答案,这向你发出信号; 这意味着答案可能是任意大的,取决于真实值的实际位置.