Eiffel 中整数的大小是多少?它如何处理溢出?

What is the size of an integer in Eiffel? How does it handle overflow?

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

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

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

如果有任何我可以找到的资源,请告诉我。

根据 ECMA standard INTEGER is defined as an alias for one of the sized variants of integer classes with the recommended size of 64 bits. However, because there is a lot of existing code, current implementations still use 32-bit integers for INTEGER. The size can be set by a compiler option (e.g., EiffelStudio 使用埃菲尔配置文件 (ECF) 将 INTEGER 映射到 INTEGER_32,这是在核心库 Base 中完成的。原则上,库或应用程序可以使用类型映射为 INTEGER 类型指定不同的大小。该机制不是埃菲尔语言规范的一部分,因此通常在需要特定尺寸时直接使用尺寸变体。

Eiffel 标准没有定义基本类型的精确行为,即从语言的角度来看,它们与任何其他类型一样被对待。据我所知,所有实现都不检查整数溢出或下溢,并默默地包装结果模数。

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

  • factorial(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 发行版中=41=]) - DECIMALMA_DECIMAL 分别 - General Decimal Arithmetic Specification
  • 之后的十进制数