Biginteger c как подключить
Перейти к содержимому

Biginteger c как подключить

  • автор:

Biginteger c как подключить

Объясните пожалуйста, почему, когда набираю Ваши примеры в IDEA, то setScale и все аргументы в скобках: BigDecimal.ROUND_UP и все другие из лекции зачёрктнутые? Ошибок нет, на экран всё выводится, но в коде эти строки зачёркиваются и пишется ошибка, например: «ROUND_NP is deprecated». Это из-за того что setScale имеет параметры int int?

Руслан Уровень 22
3 августа 2022
Имеет смысл полностью отказаться от примитов в пользу BigInteger?)
Vlad Уровень 28
8 июня 2022

опечатка: » а есть такие, которые позволяю(пропущена т) задавать настройки создаваемого объекта (способы округления, количество знаков после запятой):»

Anastasia A. Уровень 24
29 апреля 2022

В ROUND_UP и ROUND_DOWN ошибки. Оно либо от нуля, либо к нулю, независимо от знака числа. Даже проверила в Idea

Серега Батенин Уровень 34
20 марта 2022

А мне вот интересно почему когда мы рассматривали конкретные пример округления BigDecimal с вариантами ROUND_UP ROUND_DOWN, то значение у отрицательных чисел были одни. А когда начали рассматривать ROUND_CEILING и ROUND_FLOOR, то в таком случае значения у отрицательных чисел почему то поменялись, хотя написано что к ним применяются вышеупомянутые методы UP и DOWN

Алексей Сивенков Уровень 16
12 января 2022

добрый день кто то может пояснить логику: BigInteger — который на вход принимает только строчные описания чисел ну вот как так то.

vzubkeviсh Уровень 26
28 января 2021

 char[] arr = new String("455656.545").toCharArray(); BigDecimal fourthValue = new BigDecimal(arr, 2, 6); //5656.5 

Задаем массив знаков, с которого элемента берём значения для объекта и сколько этих элементов берём. Берем же 6 элементов, почему в результате вышло 5?

Rufat Khafizov Уровень 23
6 января 2021

метод BigInteger probablePrime (int bitLength, Random rnd) Возвращает положительное значение BigInteger, которое, вероятно, является простым, с указанным значением bitLength. Вероятность того, что BigInteger, возвращаемый этим методом, является составным, не превышает 2 в степени -100 . (мануал) Так что это не совсем рандом, в полном смысле этого слова.

Иван Уровень 41
7 августа 2020

Возможно, я тупой, но примеры с созданием BigDecimal() с различными параметрами, передаваемыми в конструктор — абсолютно непонятные.

Подключение Библиотеки Bigint

мне выдает следующие ошибки:
1>bg1.obj : error LNK2001: unresolved external symbol «public: void __thiscall BigInteger::multiply(class BigInteger const &,class BigInteger const &)» (?multiply@BigInteger@@QAEXABV1@0@Z)
1>bg1.obj : error LNK2001: unresolved external symbol «public: void __thiscall BigInteger:perator=(class BigInteger const &)» (??4BigInteger@@QAEXABV0@@Z)
1>bg1.obj : error LNK2001: unresolved external symbol «public: __thiscall BigInteger::BigInteger(int)» (??0BigInteger@@QAE@H@Z)
1>bg1.obj : error LNK2001: unresolved external symbol «class std::basic_ostream > & __cdecl operator <<(class std::basic_ostream> &,class BigInteger const &)» (??6@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@std@@AAV01@ABVBigInteger@@@Z)
1>C:\Users\MartinSeptim\Documents\С++\bg1\Release\bg1.exe : fatal error LNK1120: 4 unresolved externals

как решить эту проблему?

Biginteger c как подключить

Встроенные примитивные числовые типы не всегда могут подходить для определенных программ. Например, необходимо хранить и использовать в программе очень большие числа, которые выходят за пределы допустимых значений для типов long и double. В этом случае для работы с числовыми данными можно использовать два дополнительных типа из пакета java.math — BigInteger (для целочисленных данных) и BigDecimal (для чисел с плавающей точкой).

Основные методы класса BigInteger:

  • BigInteger add(BigInteger other) : возвращает сумму двух чисел
  • BigInteger subtract(BigInteger other) : возвращает разность двух чисел
  • BigInteger multiply(BigInteger other) : возвращает произведение двух чисел
  • BigInteger divide(BigInteger other) : возвращает частное двух чисел
  • BigInteger mod(BigInteger other) : возвращает остаток от целочисленного деления двух чисел
  • BigInteger sqrt() : возвращает квадратный корень числа
  • int compareTo(BigInteger other) : сравнивает два числа. Возвращает -1, если текущий объект меньше числа other, 1 — если текущий объект больше и 0 — если числа равны
  • static BigInteger valueOf(long x) : возвращает объект BigInteger, значение которого равно числу, переданному в качестве параметра
  • int intValue() : конвертирует объект BigInteger в объект int
  • byte byteValue() : преобразует объект BigInteger в byte
  • short shortValue() : преобразует объект BigInteger в short
  • long longValue() : преобразует объект BigInteger в long

Основные методы класса BigDecimal:

  • BigDecimal add(BigDecimal other) : возвращает сумму двух чисел
  • BigDecimal subtract(BigDecimal other) : возвращает разность двух чисел
  • BigDecimal multiply(BigDecimal other) : возвращает произведение двух чисел
  • BigDecimal divide(BigDecimal other) : возвращает частное двух чисел
  • BigDecimal divide(BigDecimal other, RoundingMode mode) : результат деления двух чисел, округленное в соответствии с режимом mode
  • int compareTo(BigDecimal other) : сравнивает два числа. Возвращает -1, если текущий объект меньше числа other, 1 — если текущий объект больше и 0 — если числа равны
  • static BigDecimal valueOf(double x) : возвращает объект BigDecimal, значение которого равно числу, переданному в качестве параметра
  • double doubleValue() : преобразует объект BigDecimal в double
  • float floatValue() : преобразует объект BigDecimal в float

Пример использования классов BigInteger и BigDecimal:

import java.math.*; public class Program < public static void main(String[] args) < BigInteger a = BigInteger.valueOf(2147483647); BigInteger b = BigInteger.valueOf(2147483641); //a = a * b; // так нельзя a = a.multiply(b); System.out.println(a); // 4611686001247518727 long x = a.longValue(); System.out.println(x); // 4611686001247518727 BigDecimal c = BigDecimal.valueOf(2325.06); BigDecimal d = BigDecimal.valueOf(215.06); c = c.subtract(d.multiply(BigDecimal.valueOf(2.1))); System.out.println(c); // 1873.434 double y = c.doubleValue(); System.out.println(y); // 1873.434 >>

Стоит отметить, несмотря на то, что объекты BigInteger и BigDecimal представляют числа, мы не можем применять с ними стандартные арифметические операции. Все математические действия с данными объектами идут через их методы.

BigInteger в С++ или его аналог?

В последнее время программировать приходится имея дело с большими числами, так, что не хватает размеров типа. Как подключить бибилиотеку BigInteger в С++? Это по идее должно решить проблему. Или может есть какой-то аналог? Нужно решить задачу, где на вход подаются числа не превышающие 10^100 . Как вообще найти выход из положения?

Отслеживать
задан 17 июл 2018 в 19:27
508 1 1 золотой знак 5 5 серебряных знаков 22 22 бронзовых знака
GMP, boost::multiprecision, MAPM.
17 июл 2018 в 19:59

2 ответа 2

Сортировка: Сброс на вариант по умолчанию

Классика жанра это GMP. Но есть и другие варианты.

Как-то мне тоже понадобилась длинная арифметика. Но использовать GMP было нельзя, так как длинная арифметика нужна была для микроконтроллеров без операционной системы и кучи. Пришлось написать свою библиотеку С++ шаблонов для работы с длинными целыми числами. Вот ссылка:

Там в архиве есть и описание на русском языке.

А память под переменные и промежуточные результаты выделялась по месту инициализации шаблона в виде массивов с вычисленным во время компиляции размером?

Да, все массивы хранятся статически в объектах класса и размер переменных определяется пользователем на этапе компиляции. То есть внутри этой библиотеки шаблонов обращений к куче нет. Соответственно, нет затрат времени на размещение объектов в куче.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *