Как изобразить число больше максимального значения - PullRequest
0 голосов
/ 23 ноября 2010

Как представить значения, которые превышают максимальные значения любого конкретного типа данных (int, long)?

Я думаю о том, чтобы иметь другое хранилище, действующее как счетчик.Как только максимальное значение пересечено, счетчик обновляется, чтобы сказать, что переменная превысила предел для "x" числа разЕсть ли другой эффективный способ сделать это?

Как мы отображаем точное значение?

PS: Просто гипотетический вопрос.

Ответы [ 3 ]

2 голосов
/ 23 ноября 2010

Один из способов заключается в том, чтобы на самом деле получить одно из значений для этой цели.

Например, если у вас есть 16-битный целочисленный тип, который может представлять значения от 0 до 65535 включительно, уменьшите диапазонот 0 до 65534 и используйте 65535, чтобы представить значение «слишком чертовски большое».

Вы должны быть осторожны, чтобы контролировать операции, чтобы они не создавали это значение в обычном ходе событий, но этодостаточно просто, если ваш язык предоставляет возможности класса.

В качестве альтернативы вы можете использовать следующий по величине тип данных, например long для int или long long для long, и использовать дополнительный диапазон для хранения информации.

И, если вам нужно больше, вы можете закодировать библиотеку bignum (или использовать уже существующую), чтобы на ваши номера не накладывались искусственные ограничения.

1 голос
/ 23 ноября 2010

Рассмотрим стандартный IEEE-754 float и битовые комбинации "Infinity". Можно зарезервировать подобный битовый шаблон внутри фиксированного типа int / long для обозначения «Бесконечность». Тем не менее, процессор не поможет вам в математических / переполненных состояниях, как большинство FPU.

Некоторые языки, такие как Ruby или elisp, уже «резервируют» биты в целых числах (например, фиксированный номер в Ruby ограничен [-2 ^ 29,2 ^ 29-1], потому что 2 бита используются для ведения объекта). Использование определенной комбинации битов и битов приведет к удалению только одного потенциального значения.

Если вы говорите о языках более высокого уровня, скажем, C #, тогда легко определить пользовательский тип:

struct IntWithStuff {
   int value;
   bool isTooBig;
}

Вы также можете перегружать различные операторы и реализовывать некоторые (явные) приведения, но я отступаю ...

1 голос
/ 23 ноября 2010

Я не уверен, но думаю, вам придется создать свой собственный тип данных (или класс). Это было сделано раньше. Фактически, некоторые языки имеют свою собственную реализацию этого:

http://groups.csail.mit.edu/mac/users/adams/BigInt/BigInt.html

...