Установка int на бесконечность в C++



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

int b = anyValue;

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

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

338   6  

6 ответов:

целые числа по своей сути конечны. Ближе всего вы можете получить, установив 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();

целые числа конечны, поэтому, к сожалению, вы не можете установить его на истинную бесконечность. Однако вы можете установить его на максимальное значение 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 и перегрузить операторы сравнения, хотя это, вероятно, не нужно для большинства проектов.

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
}

вы также можете использовать INT_MAX:

http://www.cplusplus.com/reference/climits/

Это эквивалентно использованию numeric_limits.

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

просто использовать: (unsigned)!((int)0)

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

еще лучше

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

а затем просто использовать INF в коде

int мин и Макс значения

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

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

    Ничего не найдено.

Добавить ответ:
Отменить.