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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ сумма произведений двух рядов разной http://www.cyberforum.ru/cpp-beginners/thread303369.html
Подскажите, пожалуйста, где ошибка.. Никак не могу понять, что не так.. В массивах x1 и x2 содержатся ряды разных размеров, размерность x1 = 2*n, размерность x2 = 6*n. Конечный массив содержит (4*n+1) элемент, каждый из которых вычисляется следующим способом: массив x1 умножается на соответствующие элементы массива x2 (т.е. x1(0)*x2(0)+...+x1(n)*x2(n) ) - это первое значение искомого массива,...
C++ Перезагрузка operator - Есть одна задача : Одномерный массив а и b. Класс одномерный массив. Реализовать для объектов данного класса перезагрузку операции - (c=a-b) #include <iostream.h> #include <assert.h> #include <conio.h> class Vector { friend ostream& operator << (ostream &, const Vector &); http://www.cyberforum.ru/cpp-beginners/thread303367.html
C++ Вывод полей класса после сравнения
Проблема: (Нужно отыскать нужный фильм и вывести данные об нем.) Если еще конкретнее, то почему после успешного сравнения некорректно выводятся данные об фильме: название выводится правильно, а вот жанру фильма почемуто ставится в соотвествие данные следующего за ним поля ?? (Ход решения и 2 скрина с входными данными и результатом работы см.ниже). Имеется класс "фильмы" с полями назвиние,...
C++ консольная программа с выводом меню
Помогите пожалуйста!!! Написать программу, которая выводит на экран меню: 1. Запись чисел в файл 2. Поиск в файле наименьшего числа и его порядкового номера 3. Выведения на экран содержимого файла 4. Выход из программы Программа работает в цикле и продолжает роботу пока не будет выбрано пункт меню 4. При виборе 1 пункту меню происходит запись введенных с клавиатуры чисел в файл с именем...
C++ В чем заблуждение? (структуры) http://www.cyberforum.ru/cpp-beginners/thread303303.html
вообщем, программа, структура, сожержащая в себе информацию об авторах книг, их названии и тираже. нужно вывести самого популярного автора. выводит. Но если их несколько например Пушкин 20 книг и Лермонтов 20 книг, нужно написать, что самого популярного автора нет. привожу текст программы, ниже вопрос. #include<stdio.h> #include<string.h> typedef struct {char avtor; ...
C++ Вывести дату, следующую за указанной Даны два целых числа: D(день) и M(месяц), определяющие правильную дату невысокосного года. Вывести значения D и M для даты, следующей за указанной. подробнее

Показать сообщение отдельно
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619

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

24.05.2011, 07:37. Просмотров 1233. Ответов 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); 
}
. Сам вижу, что для условной компиляции это не пойдёт. С этим можно бороться? Как?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru