Eiffelには、INTEGER
タイプのサイズは何ですか?エッフェル塔の整数の大きさは?どのようにオーバーフローを処理するのですか?
サイズが32ビットであると主張されているhereを除いて、それを見つけることができませんでした。
この場合、エッフェルはどのようにオーバーフローを処理しますか? Cのような未定義の動作ですか?または、オーバーフローを防止するメカニズムがありますか?
私が見つけることができるリソースがある場合は、私にそれを指示してください。
Eiffelには、INTEGER
タイプのサイズは何ですか?エッフェル塔の整数の大きさは?どのようにオーバーフローを処理するのですか?
サイズが32ビットであると主張されているhereを除いて、それを見つけることができませんでした。
この場合、エッフェルはどのようにオーバーフローを処理しますか? Cのような未定義の動作ですか?または、オーバーフローを防止するメカニズムがありますか?
私が見つけることができるリソースがある場合は、私にそれを指示してください。
ECMA standardINTEGER
は、64ビットの推奨サイズの整数クラスのサイズ変更バリエーションのエイリアスとして定義されています。しかし、既存のコードが多いため、現在の実装では、INTEGER
には32ビットの整数が使用されています。サイズはコンパイラオプションで設定できます(例えば、EiffelStudioはECF(Eiffel Configuration File)を使用してINTEGER
をINTEGER_32
にマッピングします。これはコアライブラリBase
で行われます)。原則として、ライブラリーまたはアプリケーションは、タイプマッピングを使用してINTEGER
タイプに対して異なるサイズを指定することができます。この機構はEiffel言語仕様の一部ではないため、特定のサイズが必要な場合は、通常はサイズ変更されたバリアントが直接使用されます。
エッフェル標準では、基本的なタイプの正確な動作を定義していません。つまり、言語の観点からは他のタイプのように扱われます。私が知っているすべての実装では、整数のオーバーフローやアンダーフローをチェックせずに、サイズをモジュロにして自動的に結果をラップします。
任意精度の整数演算を提供するいくつかのライブラリーベースのソリューションがあります
FACTORIAL
を用いて試験し、1998(大きな整数BIG_INTEGER
他の数値クラスのセットINTEGER_X
- 任意精度整数DECIMAL
とMA_DECIMAL
それぞれ、小数点以下の数字はGeneral Decimal Arithmetic Specification
ありがとうございます。それはオーバーフローが未定義の振る舞いであることを意味しますか? – GoodDeeds
@ GoodDeeds、オーバーフローは標準整数クラスによって検出も報告もされません。 –
その場合、 'INTEGER'オブジェクトの結果の値はオーバーフローされた値のモジュロであると定義されていますか?そのサイズは未定義ですか? – GoodDeeds