为什么print(1.0/0)
返回inf
而print(0.0/0)
返回NaN和print(0/0)
在编译时失败?编译时间检查除以0除以Swift
似乎Swift有编译时间检查整数除以0,但不是浮动/双打?
有人可以解释为什么会出现这种情况吗?
为什么print(1.0/0)
返回inf
而print(0.0/0)
返回NaN和print(0/0)
在编译时失败?编译时间检查除以0除以Swift
似乎Swift有编译时间检查整数除以0,但不是浮动/双打?
有人可以解释为什么会出现这种情况吗?
浮点数及其算术的IEEE 754标准将“无限”和“非数字”定义为有效值。在数学上有用的意义上,它们可能不是“有效的”......但它们是标准定义的。与浮点数一起使用的代码预计这些值来自某些操作,并且可以根据需要检查/响应这些值,所以Swift尊重FP数学的标准。
整数算术没有相应的跨语言,与CPU无关的标准。在Swift之外,通常假设将整数除以零是Bad Thing,因为您不一定知道它是否会暂停程序或产生不正确的结果。
对于所有整数算术,Swift的默认行为是“安全的”,所以任何溢出该类型边界的操作都会导致运行时异常。 (这包括除数为零。)
当你把0/0
在文字代码,你会得到一个编译时错误因为斯威夫特在编译时间常数进行运算。 (如果您的代码类似于let x = 1 + 2
,那么在运行时计算得到的3
是没有意义的,因为它对于程序的所有运行都是恒定的。)