2010-11-23 20 views
0

特定のデータ型(int、long)の最大値を超える値を表現する方法はありますか?最大値より大きい数値を表す方法

私は、カウンタのように動作する別のストレージスペースを持つことを考えています。最大値を超えると、カウンタが更新され、変数が "x"回の制限を超えたことを示します。それを行う他の効率的な方法がいくつかありますか?

正確な値はどのように表示されますか?

P.S:ちょっと仮説的な質問です。

答えて

2

1つの方法は、実際にこの目的のために値の1つを切り出すことです。

たとえば、0〜65535の値を表すことができる16ビットの整数型の場合は、範囲を0〜65534に減らし、65535を使用して "too darned big"を表します。

通常のイベントでは値を生成しないように操作を制御するように注意しなければなりませんが、言語でクラスの機能が提供されている場合は非常に簡単です。

また、あなたはlongのために、このようなintためlonglong longとして、次の最大のデータ型を使用して情報を保存するために、余分な範囲を使用することができます。

これ以上必要な場合は、数字に人為的な制限がないようにbignumライブラリをコード化する(または既存のものを使用する)ことができます。

1

は、標準のIEEE-754フロートと「インフィニティ」のビットパターンを考えてみましょう:実際には、いくつかの言語は、この独自の実装を持っています。 "Infinity"を意味する固定int/long内部に同様のビットパターンを予約することができます。しかし、CPUは、ほとんどのFPUのように数学/オーバーフロー状態であなたを助けません。

Rubyやelispのようないくつかの言語ではすでにビットが整数で "予約"されています(Rubyのfixnumはオブジェクトハウスキーピングに2ビットが使用されるため[-2^29,2^29-1]に制限されます)。特定のビットパターン対ビットを使用すると、潜在的な値が1つだけ削除されます。

あなたはより高いレベルの言語について話している場合は、たとえば、C#の、それはカスタム型を定義するのは簡単です:

struct IntWithStuff { 
    int value; 
    bool isTooBig; 
} 

ます。また、さまざまな演算子をオーバーロードして、いくつかの(明示的な)を実装することができますがキャストが、私は逃げる...

関連する問題