2023: ARB был объединен в Флинт. Настоящее хранилище архивируется и больше не будет обновляться. Видеть
https://github.com/flintlib/flint/
Для новых разработок!
ARB-это библиотека C для произвольной арифметики. Он имеет полную поддержку как реальных, так и для сложных чисел. Библиотека безопасна для потока, портативно и тщательно протестирована. ARB - это бесплатное программное обеспечение, распространяемое по GNU Lesser General Public Public License (LGPL), версии 2.1 или более поздней версии.
Документация: http://arblib.org
Обновления разработки: http://fredrikj.net/blog/
Автор: Fredrik Johansson [email protected]
Отчеты об ошибках, запросы на функции и другие комментарии приветствуются в частном общении, на трекере выпуска Github или в списке рассылки Flint flint [email protected].
Следующая программа оценивает sin(pi + exp(-10000)) . Поскольку вход в синусную функцию соответствует корню в пределах 4343 цифр, для получения точного результата требуется не менее 4343 цифр (14427-битная). Программа повторяет оценку в 64-битной 128-битной, ... точке, остановленной только тогда, когда результат является точным, по крайней мере, до 53 бит.
#include "arb.h"
int main()
{
slong prec;
arb_t x, y;
arb_init(x); arb_init(y);
for (prec = 64; ; prec *= 2)
{
arb_const_pi(x, prec);
arb_set_si(y, -10000);
arb_exp(y, y, prec);
arb_add(x, x, y, prec);
arb_sin(y, x, prec);
arb_printn(y, 15, 0); printf("n");
if (arb_rel_accuracy_bits(y) >= 53)
break;
}
arb_clear(x); arb_clear(y);
flint_cleanup();
}
Вывод:
[+/- 6.01e-19]
[+/- 2.55e-38]
[+/- 8.01e-77]
[+/- 8.64e-154]
[+/- 5.37e-308]
[+/- 3.63e-616]
[+/- 1.07e-1232]
[+/- 9.27e-2466]
[-1.13548386531474e-4343 +/- 3.91e-4358]
Каждая строка показывает строгий корпус точного значения выражения. Программа демонстрирует, как пользователь может полагаться на автоматическое отслеживание границ ошибок ARB, чтобы получить выход, который гарантированно будет точным - пользователь не должен провести анализ ошибок.
Для получения дополнительных примеров программ см.: Http://arblib.org/examples.html
Помимо базовой арифметики, ARB позволяет работать с одномерными полиномами, усеченными сериями мощности и матрицами над реальными и сложными числами.
Поддерживается базовая линейная алгебра, включая умножение матрицы, детерминантную, обратную, несуществующую решающую, экспоненциальную матрицу и вычисление собственных значений и собственных векторов.
Поддержка полиномов и серии мощности довольно обширная, включая методы композиции, реверсию, деревья продуктов, многоточечную оценку и интерполяцию, сложную изоляцию корня и трансцендентные функции серии мощности.
Другие функции включают в себя изоляцию корня для реальных функций, строгую численную интеграцию сложных функций и дискретные преобразования Фурье (DFTS).
ARB может вычислить широкий спектр трансцендентальных и специальных функций, включая гамма-функцию, функции полигаммы, функцию riemann Zeta и Hurwitz Zeta, Dirichlet L-функции, полилогарифм, функция ошибок, гипергеометрические функции Gauss 2F1, комбинированные гипергеторные функции, функции Bessel, другие функции LegendRe-функции, LegendRe-функции, LegendRe-функции, LegendRe-функции, LegendRe-функции, другие функции. Полиномы, экспоненциальные и тригонометрические интегралы, неполные гамма-функции и бета-функции, функции якоби тета, модульные функции, эллиптические функции Weierstrass, полные и неполные эллиптические интегралы, среднее арифметическое геометрическое, номера берноулли, функция разделения, Barnes G-Function, Lambert W-функция W.
ARB использует представление о реальных числах в средней точке (мяч). При высокой точности это позволяет выполнять интервальную арифметику без значительных накладных расходов по сравнению с простым арифметикой с плавающей точкой. Также были реализованы различные оптимизации низкого уровня для снижения накладных расходов при точности всего нескольких машинных слов. Большинство операций на полиномах и серии мощности используют асимптотически быстрое умножение БПФ на основе кремня. Точно так же большинство операций на больших матрицах используют преимущества быстрого умножения целочисленной матрицы во Флинте.
Для базовой арифметики ARB, как правило, должен быть так быстро, как MPFR (http://mpfr.org), хотя он может быть немного медленнее при низкой точке и примерно вдвое быстрее, чем mpfi (https://perso.ens-lyon.fr/nathalie.revol/software.html).
Трансцендентные функции в ARB довольно хорошо оптимизированы и, как правило, должны быть быстрее, чем любое другое программное обеспечение произвольного назначения в настоящее время. Следующая таблица сравнивает время в секундах, чтобы оценить гипергеометрическую функцию Gauss 2F1(1/2, 1/4, 1, z) на комплексном числе z = 5^(1/2) + 7^(1/2)i , до заданного числа десятичных цифров (ARB 2,8-GIT и MPMATH 0,19 на 1,90 GHZ INTEL I5-4300U, MathEMATATIATATIATATIATIATATIATATIATIATIATATIATATIATATATIAMATIC 97.07. Xeon X5675).
| Цифры | Математика | Mpmath | Арб |
|---|---|---|---|
| 10 | 0,00066 | 0,00065 | 0,000071 |
| 100 | 0,0039 | 0,0012 | 0,00048 |
| 1000 | 0,23 | 1.2 | 0,0093 |
| 10000 | 42,6 | 84 | 0,56 |
ARB зависит от Flint (http://flintlib.org/), либо GMP (http://gmplib.org) или mpir (http://mpir.org) и mpfr (http://mpfr.org).
См. Http://arblib.org/setup.html для инструкций по созданию и установке ARB непосредственно из исходного кода. ARB также может быть доступен (или скоро) в качестве пакета для вашего распределения Linux.
SageMath (http://sagemath.org/) включает в себя ARB в качестве стандартного пакета и содержит интерфейс Python высокого уровня. Смотрите документацию Sagemath для Realballfield (http://doc.sagemath.org/html/en/reference/rings_numerical/sage/rings/real_arb.html) и Complexballfield (http://doc.sagemath.org/html/en/reference/rings_numerical/sage/rings/complex_arb.html).
Nemo (https://github.com/nemocas/nemo.jl/)-это компьютерный пакет алгебры для языка программирования Julia, который включает в себя интерфейс Julia высокого уровня для ARB. Сценарий установки NEMO создаст локальную установку ARB вместе с другими зависимостями.
Также доступен отдельный интерфейс Python для Flint и ARB (https://github.com/fredrik-johansson/python-flint).
Доступна отдельная обертка трансцендентных функций для использования с complex double типом C99 (https://github.com/fredrik-johansson/arbcmath).
Другие сторонние обертки включают: