calx
C++23 総合数学ライブラリ
C++23 / LGPL v3 / 外部依存ゼロ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・楕円積分・超幾何関数など。
double・Complex<double>・Float (多倍長) で利用可能。
数値アルゴリズム
線形代数 (LU/QR/SVD)・数値積分・求根・最適化・ODE・補間・FFT。
Matrix<Float> のように多倍長型との組み合わせも可能。
Lie 群 / 代数
SO(2)・SE(2)・SO(3)・SE(3) の exp/log・ヤコビアン・随伴表現。 SLAM / ロボティクス向け、左摂動モデル (GTSAM 規約)。
API リファレンス
コア型 (コンパイル済みライブラリ)
コア型 (ヘッダーオンリー)
アルゴリズムモジュール (ヘッダーオンリー)
アルゴリズム解説
各クラスの内部で使用されるアルゴリズムの詳細。閾値、計算量、設計判断の根拠を扱う。
コード例
#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
}