在Eiffel中,INTEGER
类型的大小是多少?
我无法找到它,除了here,声称大小为32位。
在这种情况下,Eiffel手柄如何溢出?是不是像C中的未定义行为?或者是否有防止溢出的机制?
如果有任何资源我可以找到它,那么请指导我。
答案 0 :(得分:1)
根据ECMA standard INTEGER
被定义为整数类的一个大小变体的别名,建议大小为64位。但是,由于存在大量现有代码,因此当前实现仍然使用INTEGER
的32位整数。可以通过编译器选项设置大小(例如,EiffelStudio使用Eiffel配置文件(ECF)将INTEGER
映射到INTEGER_32
,这在核心库{{1}中完成})。原则上,库或应用程序可以使用类型映射为Base
类型指定不同的大小。该机制不是Eiffel语言规范的一部分,因此当需要特定大小时,通常会直接使用大小的变体。
Eiffel标准没有定义基本类型的精确行为,即从语言角度来看它们被视为任何其他类型。我知道,所有实现都不检查整数溢出或下溢,并以模块的形式静默包装结果。
有几种基于库的解决方案提供任意精度整数运算:
INTEGER
代表大整数值FACTORIAL
带有一组其他数字类BIG_INTEGER
- 任意精度整数INTEGER_X
- General Decimal Arithmetic Specification