Липецкие форумы
23 Октября 2018, 07:52:56 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Страниц: [1]   Вниз
  Печать  
Автор Тема: "сверхдлинные" в C++  (Прочитано 2990 раз)
0 Пользователей и 1 Гость смотрят эту тему.
IERO
Живет на форуме
*****

Рейтинг: -4
Offline Offline

Сообщений: 1128


Просмотр профиля
« : 06 Апреля 2008, 22:48:49 »

сначит есть задача: нужно возводить в степень по модулю большие целые числа(512+ байт).
родной плюсовый инт максимум 64 бита, т.е. 8 байт.
с float и double сравнение по модулю не прокатывает.
как выкрутиться из ситуации, сдавать уже во вторник...
Записан
Barmen
Заслуженный
****

Рейтинг: -13
Offline Offline

Сообщений: 555



Просмотр профиля
« Ответ #1 : 06 Апреля 2008, 23:44:59 »

А массив создать? Максимальный размер переменной это 128 бит (long double). У инта кстати не 8 байт, а 4. Это у лонг инта 8. А с массивом уже проще будет. Разбиваешь число по разрядам на 4-5 чисел. А там уже по формуле считать будешь типа (10000a+1000b+100c+10d+e)^k.
Записан

Сулико
Гость
« Ответ #2 : 06 Апреля 2008, 23:49:49 »

Barmen
Это у тебя инт до сих пор 4 байта :twisted:
Записан
IERO
Живет на форуме
*****

Рейтинг: -4
Offline Offline

Сообщений: 1128


Просмотр профиля
« Ответ #3 : 06 Апреля 2008, 23:54:51 »

говоря про целые - я имел ввиду все целые машинно поддерживаемые языком.
среди них и есть макс 8 байт.

вот парюсь - пишу класс который читает поток бай,т пишет массив а дальше вычисляет в столбик в 256-ричной системе счислений...

но геморойно. думал может уже есть у кото что на примете.
инкремент не пашет, хотя сложение работает корректно.
Записан
Denvikl
Живет на форуме
*****

Рейтинг: -2
Offline Offline

Сообщений: 3074



Просмотр профиля
« Ответ #4 : 07 Апреля 2008, 06:58:52 »

IERO
А как насчёт создать свой тип переменной?
Записан
Сулико
Гость
« Ответ #5 : 07 Апреля 2008, 08:27:24 »

Denvikl
Проблема, в общем, не создать тип, а обеспечить адекватное выполнение действий над этим типом.
Записан
IERO
Живет на форуме
*****

Рейтинг: -4
Offline Offline

Сообщений: 1128


Просмотр профиля
« Ответ #6 : 07 Апреля 2008, 14:20:10 »

итак. вот объясните мне глупому:
есть
Код:
longint::operator+(longint);

он выполняется коректно.
есть
Код:
longint::operator++(int x)
{
  longint a('1',1) //создает объект класса со значением 1
  *this=*this+a;
  return *this;
}

но при вызове занчение переменной для котороой делается инкремент не меняется.
Записан
True_BuGaGa
Живет на форуме
*****

Рейтинг: -2
Offline Offline

Сообщений: 1434



Просмотр профиля
« Ответ #7 : 07 Апреля 2008, 15:10:07 »

можно поюзать сторонние либы. Для больших чисел BigLib вроде должна подойти.
Записан
IERO
Живет на форуме
*****

Рейтинг: -4
Offline Offline

Сообщений: 1128


Просмотр профиля
« Ответ #8 : 07 Апреля 2008, 15:44:58 »

Цитировать
BigLib

а где её нарыть?
Записан
True_BuGaGa
Живет на форуме
*****

Рейтинг: -2
Offline Offline

Сообщений: 1434



Просмотр профиля
« Ответ #9 : 07 Апреля 2008, 17:32:00 »

Вот что тебе надо - LargeNum
http://netcode.ru/cpp/?lang=&katID=9&skatID=101&artID=3977
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  

Powered by SMF 1.1.16 | SMF © 2006, Simple Machines
Minerva Theme | The Simple Machines Forum Directory