0

Eiffel中,类型的大小是INTEGER多少?

我找不到它,除了这里,它声称大小是 32 位。

在这种情况下,Eiffel 如何处理溢出?它是像 C 中那样未定义的行为吗?还是有防止溢出的机制?

如果有任何资源我可以找到它,那么请指导我。

4

1 回答 1

1

根据ECMA 标准 INTEGER,它被定义为整数类大小变体之一的别名,建议大小为 64 位。但是,由于存在大量现有代码,当前的实现仍然使用 32 位整数INTEGER。大小可以由编译器选项设置(例如,EiffelStudio使用 Eiffel 配置文件 (ECF) 映射INTEGERINTEGER_32,这是在核心库中完成的Base)。INTEGER原则上,库或应用程序可以使用类型映射为类型指定不同的大小。该机制不是 Eiffel 语言规范的一部分,因此通常在需要特定大小时直接使用大小变体。

Eiffel 标准没有定义基本类型的精确行为,即从语言的角度来看,它们被视为与任何其他类型一样。据我所知,所有实现都不会检查整数溢出或下溢,而是将结果以它们的大小取模。

有几种基于库的解决方案可提供任意精度整数运算:

  • 阶乘(1994 年,使用 TowerEiffel 1.3.1 测试)-FACTORIAL表示大整数值
  • big_numbers (1998, 用 SmallEiffel -0.80 测试) -BIG_INTEGER带有一组其他数字类
  • eapml(Eiffel 任意精度数学库)(同时代,包含在contrib下的标准 EiffelStudio 分布中)- INTEGER_X- 任意精度整数
  • dcm(当代,包含在contrib下的标准 EiffelStudio 发行版中)和 gobo(当代,Gobo 框架的一部分,包含在contrib下的标准 EiffelStudio 发行版中) -DECIMAL以及MA_DECIMAL分别 - 遵循通用十进制算术规范的十进制数
于 2016-11-02T12:33:48.217 回答