2016-11-02 4 views
0

Eiffelには、INTEGERタイプのサイズは何ですか?エッフェル塔の整数の大きさは?どのようにオーバーフローを処理するのですか?

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

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

私が見つけることができるリソースがある場合は、私にそれを指示してください。

答えて

1

ECMA standardINTEGERは、64ビットの推奨サイズの整数クラスのサイズ変更バリエーションのエイリアスとして定義されています。しかし、既存のコードが多いため、現在の実装では、INTEGERには32ビットの整数が使用されています。サイズはコンパイラオプションで設定できます(例えば、EiffelStudioはECF(Eiffel Configuration File)を使用してINTEGERINTEGER_32にマッピングします。これはコアライブラリBaseで行われます)。原則として、ライブラリーまたはアプリケーションは、タイプマッピングを使用してINTEGERタイプに対して異なるサイズを指定することができます。この機構はEiffel言語仕様の一部ではないため、特定のサイズが必要な場合は、通常はサイズ変更されたバリアントが直接使用されます。

エッフェル標準では、基本的なタイプの正確な動作を定義していません。つまり、言語の観点からは他のタイプのように扱われます。私が知っているすべての実装では、整数のオーバーフローやアンダーフローをチェックせずに、サイズをモジュロにして自動的に結果をラップします。

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

  • factorial(1994、TowerEiffel 1.3.1でテスト) - FACTORIALを用いて試験し、1998(大きな整数
  • big_numbers値表しますSmall Eiffel -0.80) - BIG_INTEGER他の数値クラスのセット
  • eapml(Eiffel任意精密数学ライブラリ)(現代、標準EiffelStudioディストリビューションに含まれています) - INTEGER_X - 任意精度整数
  • DCM(現代、のcontrib下で標準EiffelStudio分布に含まれる)とゴボのcontrib下で標準EiffelStudio分布に含まゴボフレームワークの(現代、パート) - DECIMALMA_DECIMALそれぞれ、小数点以下の数字はGeneral Decimal Arithmetic Specification
+0

ありがとうございます。それはオーバーフローが未定義の振る舞いであることを意味しますか? – GoodDeeds

+0

@ GoodDeeds、オーバーフローは標準整数クラスによって検出も報告もされません。 –

+0

その場合、 'INTEGER'オブジェクトの結果の値はオーバーフローされた値のモジュロであると定義されていますか?そのサイズは未定義ですか? – GoodDeeds

関連する問題