「無限」に等しくする必要があるint a
があります。これは、
int b = anyValue;
a>b
は常にtrueです。
これを可能にするC++の機能はありますか?
整数は有限であるため、残念ながら真の無限大に設定することはできません。ただし、intの最大値に設定することはできますが、これは他のintより大きいか等しいことを意味します。つまり:
a>=b
常に真実です。
あなたはこれをするだろう
#include <limits>
//your code here
int a = std::numeric_limits<int>::max();
//go off and lead a happy and productive life
通常、これは2,147,483,647に等しくなります
真の「無限」値が本当に必要な場合は、doubleまたはfloatを使用する必要があります。その後、単にこれを行うことができます
float a = std::numeric_limits<float>::infinity();
数値の制限に関する追加の説明があります here
ハッピーコーディング!
注:WTPで述べたように、「無限」のintが絶対に必要な場合、intのラッパークラスを記述し、比較演算子をオーバーロードする必要がありますが、これはおそらくほとんどのプロジェクトでは必要ありません。
整数は本質的に有限です。最も近いのは、a
をint
の最大値に設定することです。
#include <limits>
// ...
int a = std::numeric_limits<int>::max();
実装でint
が32ビット幅の場合、2^31 - 1
(または2 147 483 647
)になります。
本当に無限が必要な場合は、float
やdouble
などの浮動小数点型を使用します。その後、無限大を取得できます。
double a = std::numeric_limits<double>::infinity();
int
は本質的に有限です。要件を満たす値はありません。
ただし、b
のタイプを変更する場合は、演算子のオーバーライドを使用してこれを行うことができます。
class infinitytype {};
template<typename T>
bool operator>(const T &, const infinitytype &) {
return false;
}
template<typename T>
bool operator<(const T &, const infinitytype &) {
return true;
}
bool operator<(const infinitytype &, const infinitytype &) {
return false;
}
bool operator>(const infinitytype &, const infinitytype &) {
return false;
}
// add operator==, operator!=, operator>=, operator<=...
int main() {
std::cout << ( INT_MAX < infinitytype() ); // true
}
これは将来の私へのメッセージです。
次を使用します:(unsigned)!((int)0)
すべてのビットを1に割り当てることにより、任意のマシンで可能な最大数を作成し、それを符号なしにキャストします
さらに良い
#define INF (unsigned)!((int)0)
そして、あなたのコードでINFを使うだけです