0

Eiffelでは、タイプのサイズはINTEGER?

サイズが 32 ビットであると主張されているhereを除いて、私はそれを見つけることができませんでした。

この場合、Eiffel はオーバーフローをどのように処理するのでしょうか? Cのような未定義の動作ですか?または、オーバーフローを防ぐメカニズムはありますか?

私がそれを見つけることができるリソースがあれば、私をそこに案内してください.

4

1 に答える 1

1

ECMA 標準 によるINTEGERと、推奨サイズが 64 ビットの整数クラスのサイズ変更型の 1 つのエイリアスとして定義されています。ただし、多くの既存のコードがあるため、現在の実装ではINTEGER. サイズはコンパイラ オプションで設定できます (たとえば、EiffelStudioは Eiffel 構成ファイル (ECF) を使用して にマップINTEGERしますINTEGER_32。これはコア ライブラリで行われますBase)。原則として、ライブラリまたはアプリケーションは、INTEGER型マッピングを使用して型に異なるサイズを指定できます。このメカニズムは Eiffel 言語仕様の一部ではないため、通常、特定のサイズが必要な場合は、サイズ変更されたバリアントが直接使用されます。

Eiffel 標準では、基本型の正確な動作は定義されていません。つまり、言語の観点から、基本型は他の型と同様に扱われます。私が知っているすべての実装は、整数のオーバーフローやアンダーフローをチェックせず、サイズを法として結果を静かにラップします。

任意精度の整数演算を提供するライブラリベースのソリューションがいくつかあります。

  • factorial (1994 年、TowerEiffel 1.3.1 でテスト) -FACTORIAL大きな整数値を表します
  • big_numbers (1998 年、SmallEiffel -0.80 でテスト) -BIG_INTEGER他の数値クラスのセットを使用
  • eapml (Eiffel Arbitrary Precision Mathematics Library) ( contribの下の標準 EiffelStudio ディストリビューションに同時期に含まれている) - INTEGER_X- 任意精度の整数
  • dcm ( contrib の下の標準 EiffelStudio ディストリビューションに含まれる現代的なもの)および gobo ( contribの下の標準的な EiffelStudio ディストリビューションに含まれる現代的な Goboフレームワークの一部) -そしてそれぞれ - General Decimal Arithmetic Specificationに従った 10 進数DECIMALMA_DECIMAL
于 2016-11-02T12:33:48.217 に答える