Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.52/21: Рейтинг темы: голосов - 21, средняя оценка - 4.52
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6315 / 3039 / 1055
Регистрация: 01.06.2021
Сообщений: 11,586

bigint библиотека для работы с большими целыми числами на С++

10.06.2024, 22:33. Показов 5259. Ответов 69
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Создал библиотеку для работы с большими целыми числами на С++.
Учитывая, что я почти не тестировал все функции, то буду рад, если протестируете и найдете баги.

Основы работы с библиотекой:
Библиотека предлагает два класса BigInt для представления больших чисел и BigFrac для работы с большими обыкновенными дробями.

Примеры ввода, инициализации, объявления больших чисел (разумеется, ниже приведены не все возможные способы, а лишь некоторые):
C++
1
2
3
4
5
6
7
8
9
10
BigInt a; // 0
BigInt b("5");
BigInt c{"-4");
BigInt d = "12";
BigInt e = b;
BigInt f(c);
BigInt g{d};
g = e;
std::string s = "10";
BigInt h{s};
и дробей
C++
1
2
3
4
5
6
BigFrac a; // 0/1
BigFrac b{"2", "3"};
BigFrac c("4", "5");
BigInt d{"-7"};
BigInt e{"9"};
BigFrac f{d, e};
У BigInt есть методы для получения доступа к знаку и значению, которое хранится в виде строки:
C++
1
2
const std::string& get_value() const;
bool get_sign() const;
А у BigFrac для получения доступа к числителю и делителю:
C++
1
2
const BigInt& get_numerator() const;
const BigInt& get_denominator() const;
Чтобы вывести дробь или число можно напрямую писать:

C++
1
std::cout << BigInt("42");
или
C++
1
std::cout << Factorial(100);
или
C++
1
std::cout << BigFrac("1", "3");
Т.е. ostream перегружен, ну вы поняли...

Реализованные функции:

сложение, вычитание, знак минус, умножение, деление, остаток, возведение в степень
можно использовать также операторы +, -, *, /, %, ^, либо с присваиванием += -= *= /= %= ^=
Примечание: Remainder это именно остаток от деления на основе floored definition и отличается от % языка С++ на основе truncated definition. Данная функция больше напоминает на те, что в математических пакетах (Maple, Mathematica, Maxima...).

C++
1
2
3
4
5
6
7
Add(const BigInt& x, const BigInt& y) 
BigInt Subtract(const BigInt& x, const BigInt& y)
BigInt Minus(const BigInt& x)
BigInt Multiply(const BigInt& x, const BigInt& y)
BigInt Divide(const BigInt& x, const BigInt& y)
BigInt Remainder(const BigInt& x, const BigInt& y)
BigInt Pow(const BigInt& x, const int y)
Сравнение чисел (можно также использовать операторы < > <= >= == !=)
C++
1
2
3
4
5
6
bool EqualQ(const BigInt& x, const BigInt& y)
bool NotEqualQ(const BigInt& x, const BigInt& y)
bool GreaterQ(const BigInt& x, const BigInt& y)
bool LessQ(const BigInt& x, const BigInt& y)
bool GreaterEqualQ(const BigInt& x, const BigInt& y)
bool LessEqualQ(const BigInt& x, const BigInt& y)
Другие функции. Мне кажется нет смысла объяснять их предназначение. Если будут вопросы, то пишите в комментариях.
C++
1
2
3
4
5
6
7
8
9
10
11
BigInt Abs(const BigInt&);
BigInt Factorial(const int);
BigInt GCD(const BigInt&, const BigInt&);
BigInt LCM(const BigInt&, const BigInt&);
BigInt ISqrt(const BigInt&);
BigInt Fibonacci(const int);
BigInt Binomial(const int, const int);
bool EvenQ(const BigInt&);
bool OddQ(const BigInt&);
std::size_t IntegerLength(const BigInt&);
std::string Approx(const BigInt&, const std::size_t = 10ull)
Последняя функция Approx позволяет вывести большое число в научной нотации (мантисса и экспонента). Добавил ее, т.к. подумал, что она будет полезна некоторым. Причем, опционально можно выбрать сколько цифр показывать.

Функции для дробей (можно так же использовать операторы):

C++
1
2
3
4
5
6
BigFrac Add(const BigFrac& x, const BigFrac& y)
BigFrac Subtract(const BigFrac& x, const BigFrac& y)
BigFrac Minus(const BigFrac& x)
BigFrac Multiply(const BigFrac& x, const BigFrac& y)
BigFrac Divide(const BigFrac& x, const BigFrac& y)
BigFrac Pow(const BigFrac& x, const int y)
Сравнение дробей
C++
1
2
3
4
5
6
bool EqualQ(const BigFrac& x, const BigFrac& y)
bool NotEqualQ(const BigFrac& x, const BigFrac& y)
bool GreaterQ(const BigFrac& x, const BigFrac& y)
bool LessQ(const BigFrac& x, const BigFrac& y)
bool GreaterEqualQ(const BigFrac& x, const BigFrac& y)
bool LessEqualQ(const BigFrac& x, const BigFrac& y)
Другие функции
C++
1
2
3
BigFrac Abs(const BigFrac&);
BigFrac Harmonic(const int);
std::string Approx(const BigFrac&);
Для дробей тоже добавил Approx, которая показывает значение дроби в научной нотации.

P.S. Спасибо форумчанам DrOffset, TheCalligrapher, Алексей1153 и другим, которые помогли советами...
Вложения
Тип файла: zip bigint.zip (30.2 Кб, 26 просмотров)
3
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
10.06.2024, 22:33
Ответы с готовыми решениями:

Библиотека для работы с большими целыми числами
Кто то может подскажет, есть ли к Pure библиотека для работы с большими целыми числами (более 64 бит)? Не хочется изобретать велосипед....

Калькулятор для работы с большими целыми числами
Длинные целые числа. Описать класс для представления длинных целых чисел. Реализовать методы задания числа, распечатки, сложения с...

Библиотека для работы с большими числами
Доброго времени суток, комрады! Для работы с большими числами есть библиотека GMP.h. Скачал архив по ссылке https://gmplib.org/. Далее...

69
Лежебока
 Аватар для Donkix
328 / 244 / 95
Регистрация: 12.05.2021
Сообщений: 1,429
Записей в блоге: 2
11.06.2024, 15:33
Студворк — интернет-сервис помощи студентам
Наталья8, Я думаю, что стоит взять исходник у рояла и переписать под себя

Добавлено через 2 минуты
Royal_X,
Цитата Сообщение от Royal_X Посмотреть сообщение
попробуй поставить компилятор посвежее.
Знать бы еще, какой посвежее, нашел min gw 5.1.6, весь дебаг в новом деве на него поставил, а твой код не запускается
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6315 / 3039 / 1055
Регистрация: 01.06.2021
Сообщений: 11,586
11.06.2024, 15:37  [ТС]
Donkix, тут можешь скачать крайнюю версию gcc + mingw https://winlibs.com/
0
Лежебока
 Аватар для Donkix
328 / 244 / 95
Регистрация: 12.05.2021
Сообщений: 1,429
Записей в блоге: 2
11.06.2024, 15:39
В красном деве версия 6.3.0 TDM-gcc

Добавлено через 1 минуту
Royal_X, лечу проверять
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6315 / 3039 / 1055
Регистрация: 01.06.2021
Сообщений: 11,586
11.06.2024, 15:41  [ТС]
Наталья8, намек понял. Я так понимаю, что многим не нравится, что данная тема висит в разделе С++. Я перенесу его в блог.
0
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
11.06.2024, 15:42
Цитата Сообщение от Donkix Посмотреть сообщение
не const char*, а char const*
Это одно и то же.
0
 Аватар для Наталья8
623 / 381 / 67
Регистрация: 09.03.2016
Сообщений: 4,247
11.06.2024, 15:54
Цитата Сообщение от Royal_X Посмотреть сообщение
Я так понимаю, что многим не нравится
Да не то чтобы. Мне всё равно.
Просто скорость разработки говорит о том,
что либо за тебя это целая контора разрабатывала.
Либо ты большой гений.
Либо это всё просто нае......
По любому я не стану это ковырять. Смысла нету...
0
Лежебока
 Аватар для Donkix
328 / 244 / 95
Регистрация: 12.05.2021
Сообщений: 1,429
Записей в блоге: 2
11.06.2024, 16:06
Цитата Сообщение от Royal_X Посмотреть сообщение
тут можешь скачать крайнюю версию gcc + mingw https://winlibs.com/
поставил 14.1.0 win32, ничего не поменялось...

Добавлено через 27 секунд
Royal_X, укажи характеристики своего компилятора и проекта

Добавлено через 6 минут
Сделал еще на крайний случай, запустил напрямую через командную строку, даже так, ошибка не поменялось, но это я не использовал еще ключи

Добавлено через 2 минуты
Цитата Сообщение от DrOffset Посмотреть сообщение
Это одно и то же.
принял, спасибо
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6315 / 3039 / 1055
Регистрация: 01.06.2021
Сообщений: 11,586
11.06.2024, 16:18  [ТС]
Donkix, у меня 64bit

Добавлено через 46 секунд
Donkix, я перенесу тему в блог и там подробно напишу, каким компилятором была сделана библиотека
Возможно добавлю ещё dll, def файлы, чтобы кто хочет создал себе lib. Либо, если не поленюсь, то в Visual Studio создам ещё lib.

Добавлено через 9 минут
Наталья8, 90% математических функций я написал за несколько часов. Потратил бы больше, если смотрел бы чужие коды. Но написал так, как я представлял сам. Остальные функции добавил постепенно. Большая часть времени ушла на ООП. Первоначально функции получали в качестве аргументов строки и возвращали строки. Но потом мне пришлось все переделать, создать класс. И на это потратил ещё два дня, т.к. я не особо силен в ООП. Но сам проект довольно простой.
1
Лежебока
 Аватар для Donkix
328 / 244 / 95
Регистрация: 12.05.2021
Сообщений: 1,429
Записей в блоге: 2
11.06.2024, 16:35
Royal_X, принято, возможно из-за специфичных настроек твоей проги, оно у других не пашет
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6315 / 3039 / 1055
Регистрация: 01.06.2021
Сообщений: 11,586
11.06.2024, 17:23  [ТС]
Donkix, посмотри в моем блоге особенности компиляции библиотеки


Предупреждение:
Дабы не нарушать покой раздела С++ для начинающих, перенес тему в блог: https://www.cyberforum.ru/blog... g8563.html

Больше отвечать в данной теме я не буду.
0
фрилансер
 Аватар для Алексей1153
6496 / 5727 / 1133
Регистрация: 11.10.2019
Сообщений: 15,292
11.06.2024, 17:35
Royal_X, вот там то народ будет толпами ошиваться

без исходников как тестировать - непонятно
0
11.06.2024, 17:41  [ТС]

Не по теме:

Цитата Сообщение от Алексей1153 Посмотреть сообщение
без исходников как тестировать - непонятно
так ты хочешь буквы тестировать или программу. Есть библиотека, уж у тебя правильно ее подключить точно получится. Но вообще, никто ничего не обязан делать.

0
737 / 704 / 110
Регистрация: 29.05.2015
Сообщений: 4,316
11.06.2024, 18:03
Ексешник для тестирования (в папке bin)
Вложения
Тип файла: zip la.zip (14.40 Мб, 8 просмотров)
0
Лежебока
 Аватар для Donkix
328 / 244 / 95
Регистрация: 12.05.2021
Сообщений: 1,429
Записей в блоге: 2
11.06.2024, 18:13
В общем версия дева, которую предложил роял + команда -lbigint к строке компоновщика в режиме 64-бит релиза заставили работать ее даже у меня.
Это успех
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6315 / 3039 / 1055
Регистрация: 01.06.2021
Сообщений: 11,586
11.06.2024, 18:19  [ТС]
Цитата Сообщение от Алексей1153 Посмотреть сообщение
без исходников как тестировать - непонятно
ты же эксперт и тебе непонятно, как подключать библиотеку и тестировать
вот у Donkix даже получилось...
1
Лежебока
 Аватар для Donkix
328 / 244 / 95
Регистрация: 12.05.2021
Сообщений: 1,429
Записей в блоге: 2
11.06.2024, 18:21
Royal_X, можешь заодно собрать либу для дебага?
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6315 / 3039 / 1055
Регистрация: 01.06.2021
Сообщений: 11,586
11.06.2024, 18:22  [ТС]
Цитата Сообщение от Donkix Посмотреть сообщение
можешь заодно собрать либу для дебага?
добавил файл в блоге
0
фрилансер
 Аватар для Алексей1153
6496 / 5727 / 1133
Регистрация: 11.10.2019
Сообщений: 15,292
11.06.2024, 18:26
Royal_X, я не буду возиться с библиотеками, это лень. И вообще запускать IDE не хочется, я вот тут бы стал тестить https://www.onlinegdb.com/ , не выходя из браузера
0
11.06.2024, 18:32  [ТС]

Не по теме:

Цитата Сообщение от Алексей1153 Посмотреть сообщение
я вот тут бы стал тестить
понимаю, запуск ide сложнее, чем тестировать... не CLion случайно?

0
Лежебока
 Аватар для Donkix
328 / 244 / 95
Регистрация: 12.05.2021
Сообщений: 1,429
Записей в блоге: 2
11.06.2024, 18:51
Royal_X, спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.06.2024, 18:51

разработать класс реализующий методы для работы с большими целыми числами
разработать класс реализующий методы для работы с большими целыми числами (умножение, сложение, вычитание) Добавлено через 3 минуты ...

MIRACL библиотека для работы с большими числами
У меня была готовая программа с консолью и ее исходники. Когда я переписывал ее под программу с формой появилась проблема. Дело в том, что...

Библиотека для работы с большими числами, возможность факторизации
Привет всем! Какие библиотеки можете посоветовать для работы с большими числами, с возможностью их факторизации. Хотелось бы иметь...

Разработать структуру “bigint” для выполнения операций с целыми числами содержащими произвольное количество знаков
Нужна помощь с си! Это срочно, у меня получилось сделать часть, но дальше не получается. Пожалуйста, помогите. Я надеюсь , что здесь...

Разработать тип данных “bigint” для выполнения операций с целыми числами содержащими произвольное количество знаков
Разработать собственный тип данных (структуру) “bigint” для выполнения операций с целыми числами содержащими произвольное количество...


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

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Новые блоги и статьи
сукцессия 44. Решил подать на припринт в межународные сервисы препринтов. Но нужно одобрение от ученых
anaschu 25.07.2026
Английский вариант. Пока кто то не одобрит мою личность, мне не получиться это опубликовать на препринте. Но заявку на публикацию статьи я сегодня подам.
сукцессия 43. Вторая научная статья за месяц- прайминг и гатгил
anaschu 25.07.2026
две стороны одной монеты
Более приземисто - Эстафету хвоста в .cdl (деревья эстафеты в сад).
Hrethgir 24.07.2026
В будущем, после написания блока инверсии обхода дерева (эстафеты хвоста), я планирую вернуться к нашему прошлому разговору о том, обладают ли знания целеполаганием. Тогда я пришел к выводу, что. . .
Вот представьте что вам дали бессмертие.
kumehtar 24.07.2026
Вот представьте что вам дали бессмертие, ничего более не меняя. Вообще ничего, только бессмертие в нынешнем виде. Рады были бы? Что бы вы тут делали всё это время? Никакой пенсии. Никакого нового. . .
сукцессия 41
anaschu 24.07.2026
Численная верификация бифуркации в агентной модели лесной сукцессии: от одного параметра к ансамблю Автор: пользователь @Shumilov_AS | Раздел: Прикладная математика / Численные методы Кратко. . .
сукцессия 40. Ансамблевая кластерная параметризаци, часть 1.
anaschu 24.07.2026
Пр# Сопровождение научной статьи ИИ-ассистентом: подготовка публикации и калибровка агентно-ориентированной модели сукцессии микоризных систем **Полевые заметки о двухнедельной совместной работе**. . .
Теория всего 12. ВГК на планете в стратегической игре "терра"
anaschu 21.07.2026
### Главные семантические изменения и дешифровка новой физики 1. **`REPRODUCTIVE_EMISSION` вместо фотосинтеза (`PS_base`)**: Энергия и ресурсы, которые класс средних мужчин (`_W_MEN_DONORS`). . .
Публикация отклонённая на хабре. Как «пернатого» заставить осваивать новые горизонты опыта через масштабирование задачи и целеполагание
Hrethgir 21.07.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11948&stc=1&d=1784657928 Привет Хабр. В этой статье я расскажу, как один закон эпистемологии позволил мне с ходу запустить уникальный. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru