Eiffelでは、タイプのサイズはINTEGER
?
サイズが 32 ビットであると主張されているhereを除いて、私はそれを見つけることができませんでした。
この場合、Eiffel はオーバーフローをどのように処理するのでしょうか? Cのような未定義の動作ですか?または、オーバーフローを防ぐメカニズムはありますか?
私がそれを見つけることができるリソースがあれば、私をそこに案内してください.
ECMA 標準 によるINTEGER
と、推奨サイズが 64 ビットの整数クラスのサイズ変更型の 1 つのエイリアスとして定義されています。ただし、多くの既存のコードがあるため、現在の実装ではINTEGER
. サイズはコンパイラ オプションで設定できます (たとえば、EiffelStudioは Eiffel 構成ファイル (ECF) を使用して にマップINTEGER
しますINTEGER_32
。これはコア ライブラリで行われますBase
)。原則として、ライブラリまたはアプリケーションは、INTEGER
型マッピングを使用して型に異なるサイズを指定できます。このメカニズムは Eiffel 言語仕様の一部ではないため、通常、特定のサイズが必要な場合は、サイズ変更されたバリアントが直接使用されます。
Eiffel 標準では、基本型の正確な動作は定義されていません。つまり、言語の観点から、基本型は他の型と同様に扱われます。私が知っているすべての実装は、整数のオーバーフローやアンダーフローをチェックせず、サイズを法として結果を静かにラップします。
任意精度の整数演算を提供するライブラリベースのソリューションがいくつかあります。
FACTORIAL
大きな整数値を表しますBIG_INTEGER
他の数値クラスのセットを使用INTEGER_X
- 任意精度の整数DECIMAL
MA_DECIMAL