В некоторых ситуациях обычно используется достаточно большое целочисленное значение для представления бесконечности. Обычно я использую наибольшее представимое положительное/отрицательное целое число. Это обычно дает больше кода, так как вам нужно проверить, является ли один из операндов бесконечным до практически всех арифметических операций, чтобы избежать переполнения. Иногда желательно иметь насыщенную целочисленную арифметику. По этой причине некоторые люди используют меньшие значения для бесконечности, которые можно добавлять или умножать несколько раз без переполнения. Меня интересует тот факт, что это чрезвычайно распространено (особенно в соревнованиях по программированию):
const int INF = 0x3f3f3f3f;
Почему этот номер особенный? Это двоичное представление:
00111111001111110011111100111111
Я не вижу здесь особого интересного свойства. Я вижу, что это легко ввести, но если это было причиной, почти все могло бы сделать (0x3e3e3e3e, 0x2f2f2f2f и т.д.). Он может быть добавлен один раз без переполнения, что позволяет:
a = min(INF, b + c);
Но тогда все остальные константы. Googling только показывает мне много фрагментов кода, которые используют эту константу, но никаких объяснений и комментариев.
Кто-нибудь может это заметить?