Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.90
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
#1

Длинная целочисленная арифметика на c++ - C++

24.05.2011, 07:37. Просмотров 1232. Ответов 1
Метки нет (Все метки)

Я в курсе существования готовой длинной арифметики, но в этой, например, теме есть такие посты:
Цитата Сообщение от fasked Посмотреть сообщение
Все это понятно, я и сам могу перечислить еще как минимум три подобных пакета. Однако, если требуется собственная реализация, то они не помогут. Да и "тупое" их использование мало покажет основные принципы.
,
Цитата Сообщение от fasked Посмотреть сообщение
Я же сказал, что в первую очередь делаю это для себя. А если уж кому будет не лень, то разобраться в моей библиотеке будет куда проще, чем в том же GMP. К тому же я все таки надеюсь на какую-то помощь. Потому что библиотеки как таковой еще не существует.
Здесь будет аналог той темы, но на c++. Внутреняя реализация - свой union трёх массивов: массива байт, массива двубайтных целых и массива четырёхбайтных целых, причём, общий блок памяти занимают только сами массивы, но указатели на них располагаются в раздельных ячейках и просто имеют совпадающие значения. Разрядность 1024 байта.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class LongInteger
{
 protected: 
  uint8_t   Bytes[1024];
  uint16_t *Words;
  uint32_t *DoubleWords;
 public: 
  LongInteger ();
};
LongInteger::LongInteger ()
{
 Words      =(uint16_t*)(Bytes);
 DoubleWords=(uint32_t*)(Bytes);
}
Добавлено через 11 минут
Теперь такая проблема: есть разные порядки байт и слов. Порядков байт в слове существует два: младший в млашем и старший в младшем, то есть если в том порядке, в каком в памяти валяются байты, записать их номера, то может полчисться и 01 и 10. Точно также есть два порядка слов в двойном слове и не всегда он совпадает с порядком байт. При совпадении получаем порядок байт в двойном слове или 0123, или 3210 (те же младший в младшем и старшщший в младшем), но при несовпадении получаются 1032 и 2301, в этих порядках младшие и старшие байты находятся рядом и в середине. Передложите тест порядка байт и слов и внутренний формат для хранения его результатов. Кстати, есть ли вообще несуразины типа, например, 0321?

Добавлено через 12 минут
По критикуйте такое решение:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class LongInteger
{
 protected:
  uint32_t  Order; // Порядок байт в двойном слове: 0x03020100=3210, 0x02030001=2301, 0x01000302=1032, 0x00010203=0123
  uint8_t   Bytes[1024];
  uint16_t *Words;
  uint32_t *DoubleWords;
 public: 
  LongInteger ();
};
LongInteger::LongInteger ()
{
 uint8_t *OderByBytes; 
 OderByBytes   =Oder;
 OderByBytes[0]=3; // Для теста порядка в поле Order побайтно пишется значение 0x03020100.
 OderByBytes[1]=2; // Для теста порядка в поле Order побайтно пишется значение 0x03020100.
 OderByBytes[2]=1; // Для теста порядка в поле Order побайтно пишется значение 0x03020100.
 OderByBytes[3]=0; // Для теста порядка в поле Order побайтно пишется значение 0x03020100.
 Words         =(uint16_t*)(Bytes);
 DoubleWords   =(uint32_t*)(Bytes); 
}
. Сам вижу, что для условной компиляции это не пойдёт. С этим можно бороться? Как?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.05.2011, 07:37     Длинная целочисленная арифметика на c++
Посмотрите здесь:
C++ Длинная арифметика
Длинная арифметика C++
C++ Длинная арифметика))
Длинная арифметика. C++
C++ Длинная арифметика
C++ Длинная арифметика
C++ Длинная арифметика
C++ Длинная арифметика
Длинная арифметика C++
C++ Длинная арифметика
C++ Длинная арифметика С++
C++ Длинная арифметика

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ValeryLaptev
Эксперт С++
1035 / 814 / 48
Регистрация: 30.04.2011
Сообщений: 1,659
26.05.2011, 15:34     Длинная целочисленная арифметика на c++ #2
Все гораздо проще реализуется с использованием стандартного вектора...
Yandex
Объявления
26.05.2011, 15:34     Длинная целочисленная арифметика на c++
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru