|
37 / 36 / 9
Регистрация: 16.04.2015
Сообщений: 283
|
||||||||||||||||
Длинная арифметика с базой 2^3229.12.2018, 15:06. Показов 3728. Ответов 13
Метки нет (Все метки)
Решил посмотреть, будет ли быстрее, чем с базой 1 000 000 000
Почитал идею. Длинная арифметика от Microsoft: https://habr.com/post/207754/ база 2^32 Создал класс:
Но загрузка из строки того же числа - "9223372036854775807" и вывод на экран - никак. ![]() Помогите с функцией ввода/вывода:
![]() Может кто-нибудь покажет, как надо сделать? *в Инете про длинную арифметику с основанием 2^32 ничего не нашёл.
0
|
||||||||||||||||
| 29.12.2018, 15:06 | |
|
Ответы с готовыми решениями:
13
Длинная арифметика Длинная арифметика Длинная арифметика: найти остаток от деления большого числа (до 10^100 000) на 12 |
|
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
|
||
| 29.12.2018, 20:31 | ||
|
0
|
||
|
37 / 36 / 9
Регистрация: 16.04.2015
Сообщений: 283
|
|||||||||||
| 07.01.2019, 06:06 [ТС] | |||||||||||
|
В общем, ничего лучшего не придумал, кроме как преобразовать входную с десятичными цифрами в двоичную строку.
А двоичную строку распарсить в вектор по базе 2^32 Функция преобразования строки в вектор с базой 2^32
![]()
0
|
|||||||||||
|
285 / 176 / 21
Регистрация: 16.02.2018
Сообщений: 666
|
||
| 07.01.2019, 06:42 | ||
std::basic_string<BASE_TYPE>, то на небольших числах не будет выделения динамической памяти.
0
|
||
|
37 / 36 / 9
Регистрация: 16.04.2015
Сообщений: 283
|
|
| 07.01.2019, 07:12 [ТС] | |
|
rat0r, спасибо за отклик. Но непонятно, где можно поменять вектор на строку?
0
|
|
|
285 / 176 / 21
Регистрация: 16.02.2018
Сообщений: 666
|
||||||
| 07.01.2019, 07:14 | ||||||
|
SerVal,
0
|
||||||
|
37 / 36 / 9
Регистрация: 16.04.2015
Сообщений: 283
|
||||||
| 07.01.2019, 07:39 [ТС] | ||||||
|
Тут вот какая засада вылезла:
Во первых, для умножения пришлось использовать не преобразование Фурье, а Карацубу. Умножение Фурье у меня сделано для базы 10. То есть, по одной десятичной цифре в элементах вектора. Карацубу распараллелил на 2 потока. Помогло только для маленьких чисел. ![]() Для больших - Фурье в 2 раза быстрее. Ну и во вторых, для больших чисел пришлось отказаться от показа результатов на экране. Вычисление числа десятичных цифр в векторе по базе 2^31 практически не дождаться. Раньше так было:
Добавлено через 6 минут rat0r, так это не числа будут вычисляться, а строки. Такое пойло уже есть. Кажется, называется "GNU Multiple Precision Arithmetic Library". От неё вообще ничего не дождёшься.
0
|
||||||
|
285 / 176 / 21
Регистрация: 16.02.2018
Сообщений: 666
|
||
| 07.01.2019, 07:42 | ||
|
Ну тогда и вектор нельзя использовать, с ним не числа вычисляются, а вектора.
0
|
||
|
37 / 36 / 9
Регистрация: 16.04.2015
Сообщений: 283
|
|
| 07.01.2019, 08:00 [ТС] | |
|
rat0r, умножение, деление, вычитание строк давно известно. И признано абсолютно тухлой идеей. Собственно говоря, это сложение и вычитание столбиком по базе 10(как учат в детском саду или школе).
0
|
|
|
285 / 176 / 21
Регистрация: 16.02.2018
Сообщений: 666
|
|
| 07.01.2019, 08:07 | |
|
SerVal, ты хотя бы пытался прочитать (на "понять" я уже не надеюсь), что я написал в #4?
0
|
|
|
37 / 36 / 9
Регистрация: 16.04.2015
Сообщений: 283
|
||||||
| 07.01.2019, 08:45 [ТС] | ||||||
|
rat0r, скорее всего у нас немного разные понятия что такое небольшие числа.
Большие числа начинаются от 100 миллионов цифр. Вот вычисление небольшого числа - всего 6 миллионов цифр.
Хотя бы раз в 10. Или чтобы производительность возрастала пропорционально числу ядер процессора. Добавлено через 6 минут *FFT на ГПУ я уже попробовал. Ничего интересного. Вся производительность съедается пересылкой массивов на ГПУ и обратно.
0
|
||||||
|
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
|
||
| 07.01.2019, 23:50 | ||
|
При этом большую роль играет управление памятью в алгоритме. В идеале память должна выделяться ровно один раз.
0
|
||
|
37 / 36 / 9
Регистрация: 16.04.2015
Сообщений: 283
|
||||||
| 08.01.2019, 03:58 [ТС] | ||||||
|
nonedark2008, спасибо за отклик.
Да, Карацуба распараллеленный на два потока, используется как оператор умножения. А память я формально не выделяю. push_back(), pop_back(), resize() и eraze() сами с этим справляются. Про SIMD-инструкции: никогда не пробовал. Теоретически, вещь заманчивая. А практически, я ещё не добавил все операторы в класс BigInt. Для работы с int32_t, uint32_t? int64_t.. пока операторов нетути. То есть, всё через BigInt. Да и деление сейчас делаю методом Ньютона-Рафсона. Оно примерно в 30 раз медленее умножения.
************ Пока мы тут пушбэкаем, народ уже нашёл 50-е и 51-е простые числа Мерсена.
0
|
||||||
|
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
|
|||
| 08.01.2019, 16:33 | |||
|
Добавлено через 2 часа 48 минут
0
|
|||
| 08.01.2019, 16:33 | |
|
Помогаю со студенческими работами здесь
14
длинная арифметика Длинная арифметика Длинная арифметика Длинная арифметика Длинная арифметика Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
|
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11
— это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
|
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11
Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
|
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
|
|
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/
O1rJuneU_ls
https:/ / vkvideo. ru/ video-115721503_456239114
|
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ВВЕДЕНИЕ
Введу сокращения:
аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
|
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi
ветка по-частям.
коммит Create переделка под биомассу. txt
вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
|
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ *
Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во
всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
|