|
6 / 6 / 2
Регистрация: 02.06.2009
Сообщений: 99
|
|||||||||||
Длинная арифметика13.05.2012, 13:32. Показов 3656. Ответов 14
Метки нет (Все метки)
Здраствуйте, пишу модуль длинной математики. В принципе, работоспособность у него положительная. Но в силу моей неопытности меня мучают вопросы оптимизации. М.б. кто то сможет (или уже смог) реализовать более красивый код, чем мой.Собственно сначала ввод/вывод.
0
|
|||||||||||
| 13.05.2012, 13:32 | |
|
Ответы с готовыми решениями:
14
Длинная арифметика Длинная арифметика Длинная арифметика |
|
6 / 6 / 2
Регистрация: 02.06.2009
Сообщений: 99
|
||
| 13.05.2012, 13:41 [ТС] | ||
|
0
|
||
|
670 / 198 / 29
Регистрация: 10.05.2012
Сообщений: 595
|
|
| 13.05.2012, 13:42 | |
|
1
|
|
|
Higher
|
||
| 13.05.2012, 13:45 | ||
|
0
|
||
|
6 / 6 / 2
Регистрация: 02.06.2009
Сообщений: 99
|
||||||
| 13.05.2012, 13:59 [ТС] | ||||||
|
Так, такой вопрос, смотрел насколько ресурсов, 1 из них мне очень даже понравился.
0
|
||||||
|
Higher
|
||||||
| 13.05.2012, 14:04 | ||||||
|
Реализаций много, одна из лучших для с++ - библиотека gmp, в которой можно использовать код на чистом C, либо обертку вокруг него в виде класса.
А в класс стоит оборачивать, чтобы можно было писать подобные конструкции.
Вот еще один неплохой ресурс с длинной арифметикой на с++ - http://e-maxx.ru/algo/big_integer
2
|
||||||
|
670 / 198 / 29
Регистрация: 10.05.2012
Сообщений: 595
|
||
| 13.05.2012, 14:19 | ||
|
0
|
||
|
6 / 6 / 2
Регистрация: 02.06.2009
Сообщений: 99
|
||
| 13.05.2012, 14:34 [ТС] | ||
|
Может оно тогда к лучшему и не заморачиваться по поводу написания модуля арифметики, если уж gmp есть? Очень удобная библиотека для пользования. В info все от и до описано.
Как же я так пропустил ее мимо ![]() Добавлено через 1 минуту Я тогда на время от этой темы уйду, вернусь недельки через 2-3 к ней. Все таки самому изобрести велосипед по новой тоже бывает полезно. А там и собственно класс выложу, для работы с длинными, что бы пользователя порадовать, особенно тех, кому использовать сторонние либы нельзя. Всем спасибо...
1
|
||
|
6 / 6 / 2
Регистрация: 02.06.2009
Сообщений: 99
|
|
| 12.06.2012, 16:23 [ТС] | |
|
И так, возвращаясь к теме длинной арифметики, коей я интересовался некоторое время назад.
GMP - библиотека действительно очень удобная, хотя и много было вопросов по поводу того как ее подключить, все ответы уже есть, тем более они на русском... Что касаемо сообщений на тему, мне нельзя использовать сторонние либы или нужно свой класс реализовать или я не силен, а сторонние либы какие то громоздкие больно (именно с такой проблемой я по началу сам столкнулся): вот здесь http://cppalgo.blogspot.com/2010/05/blog-post.html все по полочкам разложено о написании собственного класса с пояснениями, как и что. Автор использует struct, но кто вам мешает использовать class и вынести это в заголовочный файл. Там даже код есть, немного переделываем, если есть желание, и все готово. Свою реализацию класса выложу после экзамена 18 июня с пояснениями. Еще раз спасибо тем, кто помог мне, и показал полезные ссылки...
1
|
|
|
6 / 6 / 2
Регистрация: 02.06.2009
Сообщений: 99
|
|
| 16.06.2012, 21:49 [ТС] | |
|
Класс длинно-численной арифметики выставляю чуть раньше обещанного. Прошу сильно не ругать, если где то увидели корявую реализацию. Советы по оптимизации принимаются (как в части математической, так и в части реализации самого кода) - буду очень признателен. Все советы по исправлению и доработке буду обязательно использовать, что однозначно улучшит данный вариант.
Я описал только названия - что для чего. В принципе, очень похожий код вы найдете по ссылке из предыдущего сообщения + полное описание математики произходящего.
0
|
|
|
|
|
| 17.06.2012, 00:10 | |
|
А почему собственно вектор? Разве дек не оптимальнее?
Насчет gmp - там нет логарифмов,экспонент итп поэтому придется реализовывать самому через ряды (с использованием gmp конечно) - думаю это можно было бы написать + обвертку класса по то му как при работе через ф-ции код получается не такой читаемый
0
|
|
|
Higher
|
||
| 17.06.2012, 09:01 | ||
|
С одной стороны, будут переезды из одного куска памяти в другой, с другой стороны - во всем остальном вектор быстрее, так как удалять элементы нужно только с конца. В коде мне не нравится ограничение на максимальную длину чисел. Если использовать вектор, то таких ограничений не будет, можно и без вектора неограниченную длину сделать. И еще нужно обернуть класс в отдельное пространство имен, и уже в этом пространстве написать все необходимые using'и. А то сейчас получается такая ситуация, что при включении вашего хедера автоматически раскрывается пространство имен std, а это не есть гуд.
0
|
||
|
|
|||
| 17.06.2012, 16:09 | |||
0
|
|||
| 17.06.2012, 16:09 | |
|
Помогаю со студенческими работами здесь
15
Длинная арифметика Длинная арифметика Длинная арифметика длинная арифметика Длинная арифметика Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога
Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
|
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
|
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога
В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
|
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
|
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога
Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
|
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
|
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования.
Часть библиотеки BedvitCOM
Использованы. . .
|
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога
SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
|