特定のデータ型 (int、long) の最大値を超える値を表す方法は?
カウンターのような収納スペースをもう一つ考えています。最大値を超えると、カウンタが更新されて、変数が「x」回の制限を超えたと表示されます。それを行う他の効率的な方法はありますか?
正確な値を表示するにはどうすればよいですか?
PS : 仮定の質問です。
特定のデータ型 (int、long) の最大値を超える値を表す方法は?
カウンターのような収納スペースをもう一つ考えています。最大値を超えると、カウンタが更新されて、変数が「x」回の制限を超えたと表示されます。それを行う他の効率的な方法はありますか?
正確な値を表示するにはどうすればよいですか?
PS : 仮定の質問です。
1 つの方法は、この目的のために値の 1 つを実際に切り出すことです。
たとえば、0 から 65535 までの値を表すことができる 16 ビットの整数型がある場合は、範囲を 0 から 65534 に減らし、65535 を使用して「大きすぎる」値を表します。
通常のイベントの過程でその値を生成しないように操作を慎重に制御する必要がありますが、言語がクラス機能を提供している場合、それはかなり簡単です。
long
または、 forint
やlong long
forなどの次に大きなデータ型long
を使用し、余分な範囲を使用して情報を格納することもできます。
また、それ以上のものが必要な場合は、bignum ライブラリをコーディングして (または既存のライブラリを使用して)、数値に人為的な制限を課さないようにすることができます。
標準の IEEE-754 float と「無限」ビットパターンを考えてみましょう。「無限」を意味する固定の int/long 内に同様のビットパターンを予約することができます。ただし、ほとんどの FPU のように、CPU は数学/オーバーフロー状態では役に立ちません。
Ruby や elisp などの一部の言語では、整数のビットが既に「予約」されています (たとえば、オブジェクトのハウスキーピングに 2 ビットが使用されるため、Ruby の fixnum は [-2^29,2^29-1] に制限されています)。特定のビットパターンとビットを使用すると、潜在的な値が 1 つだけ削除されます。
C# などの高水準言語について話している場合、カスタム型を定義するのは簡単です。
struct IntWithStuff {
int value;
bool isTooBig;
}
さまざまな演算子をオーバーロードして、いくつかの (明示的な) キャストを実装することもできますが、余談です...
確かではありませんが、独自のデータ型 (またはクラス) を作成する必要があると思います。これは以前にも行われています。実際、一部の言語では、これを独自に実装しています。
http://groups.csail.mit.edu/mac/users/adams/BigInt/BigInt.html