Могу ли я сделать свой собственный тип данных больше, чем у C ++?

Возможный дубликат:
Как реализовать большой int в C ++

Например, допустим, у меня есть переменная типа «длинный». Long может хранить значения от -9 223 372 036 854 775 808 до 9 223 372 036 854 775 807. Могу ли я создать свой собственный тип данных C ++, который позволяет мне создавать целые числа неограниченного размера? Я знаю, что это безрассудно с точки зрения памяти, но мне просто любопытно.


person Monkeyanator    schedule 24.08.2012    source источник


Ответы (3)


Ха! Вот безрассудный ответ!

Просто создайте класс, который динамически создает и добавляет наборы битов. Чтобы реализовать класс, вы должны создать вектор (или любой подходящий контейнер, который вам нужен / нужен), который хранит беззнаковые длинные числа (каждый беззнаковый длинный представляет собой битовый набор более высокого измерения, чем то, что ему предшествует; вы также можете использовать любые типы POD, которые вы хотеть).

Чтобы класс имел практически неограниченные возможные значения, вы должны реализовать автоматическое обнаружение (предпочтительно по операторам) переполнения и потери значимости. Для переполнения вы должны добавить набор битов более высокой размерности после последнего набора битов. Недополнение должно обрабатываться путем установки набора опорных битов, содержащего нулевое значение. Если значение становится меньше нуля (или наименьшего значения), вам следует добавить бит, установленный перед эталонным (или тем, который содержит наименьшее значение) установленным битом.

Прочтите, пожалуйста, о двоичной арифметике и основных числах. Они должны дать вам идею (и действительно очень полезны!).

person Mark Garcia    schedule 24.08.2012
comment
Спасибо, это был тот комментарий, который я искал. Это должно очень помочь мне в моем проекте научной ярмарки, поскольку я делаю программу, которая должна вычислять чрезвычайно большие простые числа. Когда вы сказали, что каждое длинное число без знака представляет набор битов, вы имеете в виду, что, может быть, первое длинное число будет 110111011101011010101110, а второе будет 1110111000001110010110101 как продолжение первого набора битов? Как мне преобразовать этот двоичный беспорядок обратно в базу 10 без использования примитивов C / C ++ по умолчанию? Отличный ответ :) - person Monkeyanator; 24.08.2012
comment
Извините за задержку. да. Вы абсолютно правы. Вы должны прочитать о преобразованиях базовых чисел (двоичных в десятичные) и о том, как складывать числа с разными базовыми размерами. Я могу отправить вам пример (или учебник), если хотите. - person Mark Garcia; 25.08.2012
comment
Да, было бы здорово. Приносим извинения за ожидание, мой компьютер какое-то время не работал, сейчас я использую другой компьютер. Да, это было бы отлично. Моя электронная почта [email protected] - person Monkeyanator; 30.08.2012

Конечно, посмотрите, например, Библиотеку арифметики множественной точности GNU.

person Dirk Eddelbuettel    schedule 24.08.2012

Да просто реализовать (или погуглить). Одним из примеров является http://sourceforge.net/projects/cpp-bigint/.

person Drakosha    schedule 24.08.2012