14 / 14 / 4
Регистрация: 08.11.2010
Сообщений: 172
1

Как выполнить сложение по модулю 2^64+13

14.12.2014, 15:31. Показов 4629. Ответов 19
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет, есть два 64 битовых числа, как можно сделать сложение по модулю mod(2^64+13)?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.12.2014, 15:31
Ответы с готовыми решениями:

Как выполнить сложение полей?
как сделать и по какому событию, чтобы получалась сумма двух тэгов input text по onchange или по...

Как выразить сложение по модулю 2(исключающее ИЛИ) через конъюнкцию, дезъюнкцию и отрицание?
Помогите выразить сумматор по модулю 2 через 3 операции:конъюнкцию, дезъюнкцию и отрицание. Набор...

Сложение по модулю 2
Здраствуйте! Подскажите пожалуйста,Есть два массива, нужно сложить их по модулю 2, не могу...

Сложение по модулю 2^32 - 1
Если сложение по модулю 2^32 является обычной XOR-операцией. А такое сложение можно записать как:...

19
7786 / 6554 / 2983
Регистрация: 14.04.2014
Сообщений: 28,631
14.12.2014, 15:34 2
По какому модулю?
0
14 / 14 / 4
Регистрация: 08.11.2010
Сообщений: 172
14.12.2014, 15:37  [ТС] 3
вот полное выражение
x=(((a*m+b)mod(2^64+13))mod(2^64)
0
7786 / 6554 / 2983
Регистрация: 14.04.2014
Сообщений: 28,631
14.12.2014, 15:41 4
Я говорю, mod - это что за функция? И что такое ^ в твоей записи?
0
14 / 14 / 4
Регистрация: 08.11.2010
Сообщений: 172
14.12.2014, 15:44  [ТС] 5
mod - модуль
^ - степень
0
7786 / 6554 / 2983
Регистрация: 14.04.2014
Сообщений: 28,631
14.12.2014, 15:51 6
Модуль числа - функция abs().
Возведение в степень для двойки 2^64 через сдвиг 1 << 64.
C++
1
abs((1 << 64) + 13)
Если я правильно понял твою запись.
1
35 / 17 / 10
Регистрация: 13.12.2014
Сообщений: 107
14.12.2014, 16:08 7
nmcf Я сомневаюсь что такой вариант прокатит.
Мне кажется что в результате получится 0, если компилятор будет использовать 32-x битное или 64-x битное значение. То что он будет использовать 128-ми битное значение я сомневаюсь.

Добавлено через 6 минут
для возведения в степень лучше использовать pow(значение, степень)
0
случайный прохожий
2927 / 1944 / 606
Регистрация: 20.07.2013
Сообщений: 5,144
14.12.2014, 16:11 8
mod здесь скорей всего остаток от деления, пусть и называется модулем.
0
14 / 14 / 4
Регистрация: 08.11.2010
Сообщений: 172
14.12.2014, 16:32  [ТС] 9
так что делать тогда с mod(2^64+13)?
я пытаюсь реализовать этот алгоритм https://ru.wikipedia.org/wiki/DFC
0
7786 / 6554 / 2983
Регистрация: 14.04.2014
Сообщений: 28,631
14.12.2014, 17:37 10
Ну я подумал, что здесь целочисленная арифметика. Если нет, то, разумеется, pow().
0
212 / 131 / 28
Регистрация: 20.03.2009
Сообщений: 1,123
Записей в блоге: 16
14.12.2014, 18:19 11
Самый простой и наглядный способ - использовать длинную арифметику (гуглим "длинная арифметика"). Возможно, существуют способы получить результат, использую 32- или 64-битные целые, но они, вероятно, будут гораздо более сложными для понимания и/или реализации.
1
2782 / 1935 / 570
Регистрация: 05.06.2014
Сообщений: 5,600
14.12.2014, 18:24 12
C++
1
2
3
4
long double a=1234,b=5678;
const long double mod=18446744073709551629.0;
double res=a+b;
cout<<(res<mod?res:res-mod)<<endl;
0
212 / 131 / 28
Регистрация: 20.03.2009
Сообщений: 1,123
Записей в блоге: 16
14.12.2014, 18:43 13
Цитата Сообщение от Renji Посмотреть сообщение
C++
1
2
3
4
long double a=1234,b=5678;
const long double mod=18446744073709551629.0;
double res=a+b;
cout<<(res<mod?res:res-mod)<<endl;
Не получится. double тоже имеет размер 64 бита. Кое-где long double может иметь больший размер (обычно 80). Но даже если long double будет иметь размер в 128 бит, то под мантиссу пойдет только часть из них, и при значении a, скажем, 2^63 + 2^10 + 1 мы даже теоретически не сможем получить точного результата, не говоря уж о том, что числа с плавающей точкой работают иначе, чем целые.
0
7786 / 6554 / 2983
Регистрация: 14.04.2014
Сообщений: 28,631
14.12.2014, 18:46 14
Посмотрел описание. Арифметика целочисленная, mod - остаток от деления.
Там нужны целые 128 бит. Стандартными средствами не решить, нужно искать какую-то библиотеку.
0
2835 / 1644 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
14.12.2014, 18:48 15
Даже если long double будет на x86 80-битный, у него мантисса 64 бита - маловато. Так что тут полудлинная арифметика.
0
Диссидент
Эксперт C
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
14.12.2014, 19:03 16
C++
1
2
3
4
5
6
7
unsigned long a1, a2, b; // или другой 64-битный целый тип, поддерживаемый твоим компилятором
b = a1 + a2;
if (b >= a1) printf("%lu", b);
else {
 if (b < 13) printf("2^64 +%lu", b);
 else printf("%lu", b-13);
}
0
7786 / 6554 / 2983
Регистрация: 14.04.2014
Сообщений: 28,631
14.12.2014, 19:28 17
Байт, а где умножение?
0
Диссидент
Эксперт C
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
14.12.2014, 20:39 18
Цитата Сообщение от nmcf Посмотреть сообщение
Байт, а где умножение?
А тебе зачем? Это уже за отдельные деньги
Хотя, если немножко подумать - что такое умножение? Всего лишь последовательность сложений. И если тебе понравилось мое решение, разрешаю реализовать и умножение тож. Ссылка на источник - не обязательна.
0
7786 / 6554 / 2983
Регистрация: 14.04.2014
Сообщений: 28,631
14.12.2014, 20:41 19
Какие ещё деньги?
Я говорю, что в описании алгоритма предполагаются целые 128 бит, поэтому смысл твоего фрагмента с a1 + a2 мне не ясен.
0
Диссидент
Эксперт C
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
14.12.2014, 20:54 20
Цитата Сообщение от nmcf Посмотреть сообщение
Какие ещё деньги?
Это шутка. Понимаешь, шутка это
А доля шутки тут в том, что это уже другая задача.
Цитата Сообщение от nmcf Посмотреть сообщение
предполагаются целые 128 бит,
Для 128 бит задача тривиальна и пуста. Идея ее в том, что модуль на границе (за границей) разрядной сетки.
0
14.12.2014, 20:54
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.12.2014, 20:54
Помогаю со студенческими работами здесь

Сложение по модулю
Есть код: procedure TForm1.Button1Click(Sender: TObject); var N, R, a, b, i, j: integer; ...

Сложение по модулю 2
Здравствуйте, помогите реализовать программу, которая будет принимать вводимый текст,...

Сложение по модулю (2^32) -1)
Добрый вечер! Подскажите как реализовать сложение по модулю ((2^32) -1). Есть текстовый файл. Я...

Сложение по модулю 2
В общем такая проблема: нужно реализовать сложение по модулю 2, для любого количества...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru