calx

C++23 総合数学ライブラリ

C++23 / LGPL v3 / 外部依存ゼロ
多倍長演算 特殊関数 線形代数 FFT 数値積分 Lie 群

calx は、多倍長演算 (Int, Float, Rational) を核に、 複素数・多項式・四元数・行列・テンソル・特殊関数・数値積分・FFT・Lie 群などを ひとつの統一的なフレームワークで提供する C++23 数学ライブラリである。

名前はラテン語 calculus (小石 = 計算の語源) に由来する。

多倍長演算

Int (整数)・Float (浮動小数点)・Rational (有理数) の 3 型。 BMI2/ADX 命令による高速 mpn 演算、5 段乗算アルゴリズム (Basecase → Karatsuba → Toom-3 → Toom-4 → NTT) を搭載。

NaN / Infinity 安全

Int・Float・Rational のすべてで NaN と Infinity が安全に伝播する。 ゼロ除算でクラッシュしない。

C++23 Concepts

Ring・Field・VectorSpace など 50 以上の代数的 concepts を定義。 型安全なジェネリックアルゴリズムを記述できる。

80+ 特殊関数

Bessel・Airy・Gamma・Zeta・楕円積分・超幾何関数など。 doubleComplex<double>Float (多倍長) で利用可能。

数値アルゴリズム

線形代数 (LU/QR/SVD)・数値積分・求根・最適化・ODE・補間・FFT。 Matrix<Float> のように多倍長型との組み合わせも可能。

Lie 群 / 代数

SO(2)・SE(2)・SO(3)・SE(3) の exp/log・ヤコビアン・随伴表現。 SLAM / ロボティクス向け、左摂動モデル (GTSAM 規約)。

API リファレンス

コア型 (コンパイル済みライブラリ)

Int
多倍長整数 — GCD, 素数判定, 冪剰余
Float
多倍長浮動小数点 — 全数学関数
Rational
有理数 — 連分数, Bernoulli 数

コア型 (ヘッダーオンリー)

Complex<T>
複素数
Polynomial<T>
多項式
Quaternion<T>
四元数
Matrix<T> / Vector<T>
行列・ベクトル
Tensor<T>
テンソル
SparseMatrix<T>
疎行列
ModularInt<P>
剰余演算

アルゴリズムモジュール (ヘッダーオンリー)

Concepts
代数的コンセプト
Roots
求根アルゴリズム
Integration
数値積分
LinAlg
線形代数
ODE
常微分方程式ソルバー
Optimization
最適化
Interpolation
補間法
FFT
高速フーリエ変換

コード例

#include <math/core/mp/Int.hpp>
#include <iostream>
using namespace calx;

int main() {
    Int a("123456789012345678901234567890");
    Int b("987654321098765432109876543210");

    std::cout << "a + b = " << a + b << std::endl;
    std::cout << "a * b = " << a * b << std::endl;
    std::cout << "gcd   = " << Int::gcd(a, b) << std::endl;

    // 素数判定 (Miller-Rabin)
    Int p("170141183460469231731687303715884105727");  // 2^127 - 1
    std::cout << p << " is prime: " << std::boolalpha
              << p.isProbablePrime() << std::endl;

    // NaN/Infinity 安全伝播
    Int zero;
    Int nan = Int(1) / zero;
    std::cout << "1/0 = " << nan << std::endl;  // NaN
}
ライセンス: GNU Lesser General Public License v3.0 (LGPL-3.0)。 calx 自体の変更は LGPL で公開する必要があるが、 calx をリンクして使うアプリケーションはプロプライエタリでも構わない。