Fortran标准中,有符号整数溢出是否为定义行为?
Fortran标准中有符号整数溢出的行为定义
根据Fortran标准(以Fortran 2018为例),有符号整数运算溢出时的行为属于处理器定义行为,而非未定义行为:
- 标准明确规定,处理器只能二选一:要么触发错误(比如终止程序、抛出异常),要么生成一个符号正确、数值为真实结果对该整数类型取值范围取模后的结果(也就是实际中常见的"回绕"行为)。
你提供的示例代码:
i = huge(i) print *, i + 1 ! prints -2147483648 with all tested compilers on a 8bit == byte machine end
就是处理器选择"回绕"处理的典型情况,完全符合标准允许的处理方式。
要注意的是,这种处理器定义行为和C语言的未定义行为有本质区别:Fortran标准严格限定了处理器的可选操作范围,而C的未定义行为允许处理器做出任何不可预期的操作。
内容的提问来源于stack exchange,提问作者M0M0
相关产品推荐
相关产品推荐

