Установка int в Infinity в С++ - программирование

Установка int в Infinity в С++

У меня есть int a, который должен быть равен "бесконечности". Это означает, что если

int b = anyValue;

a>b всегда истинно.

Есть ли какая-либо особенность С++, которая могла бы сделать это возможным?

4b9b3361

Ответ 1

Целые конечны, так что, к сожалению, вы не можете установить его в истинную бесконечность. Однако вы можете установить его на максимальное значение 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();

Дополнительные пояснения о числовых ограничениях можно найти здесь

Счастливое кодирование!

Примечание. Как упоминалось в WTP, если абсолютно необходимо, чтобы int был "бесконечным", вам пришлось бы написать класс-оболочку для int и перегрузить операторы сравнения, хотя это, вероятно, не обязательно для большинства проектов.

Ответ 2

Целые по сути являются конечными. Самое близкое, что вы можете получить, - это установить a до int максимальное значение:

#include <limits>

// ...

int a = std::numeric_limits<int>::max();

Что будет 2^31 - 1 (или 2 147 483 647), если int имеет ширину 32 бит в вашей реализации.

Если вам действительно нужна бесконечность, используйте тип числа с плавающей запятой, например float или double. Затем вы можете получить бесконечность с помощью:

double a = std::numeric_limits<double>::infinity();

Ответ 3

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
}

Ответ 5

Это сообщение для меня в будущем:

Просто используйте:   (Без знака)! ((ИНТ) 0)

Он создает максимально возможное число на любой машине, назначая все биты в 1s (одни), а затем отбрасывает их в unsigned

Еще лучше

#define INF (unsigned)!((int)0)

И просто используйте INF ниже

Ответ 6

int min и max значения

Int -2,147,483,648/2,147,483,647 Int 64 -9,223,372,036,854,775,808/9,223,372,036,854,775,807

Я думаю, вы могли бы установить a равным 9,223,372,036,854,775,807, но это должно было быть int64

если вы всегда хотите, чтобы это было больно, и почему вы должны его проверить? просто установите его всегда true