場合によっては、一般に、無限を表すのに十分な大きさの整数値を使用します。私は通常、表現可能な最大の正/負の整数を使用します。オーバーフローを避けるために、事実上すべての算術演算の前にオペランドの 1 つが無限大かどうかをチェックする必要があるため、通常はより多くのコードが生成されます。場合によっては、飽和整数演算が望ましい場合があります。そのため、オーバーフローせずに数回加算または乗算できる無限大に小さい値を使用する人もいます。私が興味をそそられるのは、(特にプログラミングコンテストで)非常に一般的に見られるという事実です。
const int INF = 0x3f3f3f3f;
なぜその数は特別なのですか?バイナリ表現は次のとおりです。
00111111001111110011111100111111
ここには特に興味深いプロパティはありません。入力するのは簡単ですが、それが理由であれば、ほとんど何でも構いません (0x3e3e3e3e、0x2f2f2f2f など)。オーバーフローすることなく 1 回追加できるため、次のことが可能になります。
a = min(INF, b + c);
しかし、その場合、他のすべての定数で十分です。グーグルは、その定数を使用する多くのコードスニペットのみを表示しますが、説明やコメントは表示しません。
誰でもそれを見つけることができますか?