FLINT 3.1
FLINT 3.1.2 (2024-03-18)#
Main contributors: Albin Ahlbäck (AA).
Maintenance
- Remove the need for
ldconfigcompletely in FLINT's Autotools build system (AA).
- Remove the need for
FLINT 3.1.1 (2024-03-07)#
Main contributors: Albin Ahlbäck (AA).
Bug fixes
- Add
padic_types.hto headers inMakefile.in(AA).
- Add
Maintenance
- Add check for
aligned_allocand_aligned_mallocfor systems that may not provide any of these functions (AA). - Add options for setting
-march=ARCH(AA).
- Add check for
FLINT 3.1.0 (2024-02-25)#
Main contributors: Fredrik Johansson (FJ), Albin Ahlbäck (AA), Jean Kieffer (JK).
License
- Changed license from "LGPL 2.1 or later" to "LGPL 3 or later".
Major interface changes
- The methods in the
fmpz_mod_matmodule now use a context object (FJ). - Changed
fq_mat_rrefand others to allow separate input and output matrices (FJ).
- The methods in the
Features
- New module
acb_thetafor computing complex Riemann theta functions with characteristics in any dimension (JK). flint_printfand related functions now supports printing common FLINT types, e.g. using the format string%{fmpz}forfmpz_t(AA).- Generic expression parsing:
gr_set_strsupports parsing expressions likea*x^2+1/3or(0.1 + 0.2*i) +/- (0.001 + 0.001*i)in any ring (FJ). - Added
fmpz_mpoly_q_set_str_prettyandfmpz_mpoly_q_get_str_pretty. - Added
flint_mpn_mulhigh(AA). - Primality testing for Gaussian integers (
fmpzi_is_prime,fmpzi_is_probabprime) (Mathieu Gouttenoire). - Modular splitting evaluation of polynomials (
_gr_poly_evaluate_modular) (David Berghaus). - Reversion of generic power series (
gr_poly_revert_seriesand variants) (FJ). - Support inversion for
grvectors (FJ). - Split generic division into
gr_divandgr_div_nonuniqueto make the semantics of division more precise (FJ). - Added
gr_ctx_is_zero_ring(FJ). - Added
nmod_divides(FJ). - Reciprocal Fibonacci constant (
arb_const_reciprocal_fibonacci) (FJ). - Added functions for working with symmetric positive-definite matrices (
fmpz_mat_is_spd,arb_mat_spd_get_fmpz_mat,arb_mat_spd_is_lll_reduced,arb_mat_spd_lll_reduce,arb_mat_randtest_cho,arb_mat_randtest_spd) (JK). - Added several helper functions for
arbandacbvectors and matrices (_arb_vec_contains,_arb_vec_equal,_arb_vec_overlaps,_arb_vec_printd,_acb_vec_contains,_acb_vec_equal,_acb_vec_get_imag,_acb_vec_get_real,_acb_vec_overlaps,_acb_vec_printd,_acb_vec_set_real_imag,_acb_vec_sqr,arb_mat_vector_mul_col,arb_mat_vector_mul_rowacb_mat_vector_mul_col,acb_mat_vector_mul_rowacb_mat_get_imag,acb_mat_get_real,acb_mat_onei) (JK). - Added
acb_urandomandarb_randtest_positive(JK). - Added
acb_mul_i_pow_si(JK). - Handle modulus 1 in
fmpz_CRTfunctions (Fabian Gundlach). - Added
_nmod_poly_conwayand_nmod_poly_conway_rand(AA). - Added
fft_small_mulmod_satisfies_bounds. The functionsd_fft_ctx_initnow verifies that the modulus satisfies the assumptions for correct modular arithmetic. (Daniel Schultz). - Allow setting generator names for
gr_mpoly,gr_series,fmpz_mpolyandfmpz_mpoly_qgeneric rings (FJ). - Added
gr_gens_recursive(FJ). - Allow overriding
flint_aligned_alloc(AA). - Added
_fmpz_vec_dot_general(FJ). - Allow setting degree and bit size evaluation limits for the
grqqbarcontext (FJ). - Added
nmod_poly_divexactand use this instead ofnmod_poly_divwhere an exact division is intended to improve performance (FJ). - Added
fmpz_poly_divexactand use this instead offmpz_poly_divwhere an exact division is intended to improve performance (FJ). - Added
fq_default_ctx_innerto access the internal context object of afq_default_ctx(FJ). - Implemented
gr_is_ringandgr_ctx_is_commutative_ringproperly (FJ). - Added
d_mul_2exp_inrange,d_mul_2exp_inrange2,d_mul_2expand_d_vec_mul_2exp(FJ). - Added
fmpz_mod_mat_det(FJ). - Allow overriding
gr_mat_lu(FJ).
- New module
Bugs
- Fixed threading problem in
gr_method_tab_init: FLINT would occasionally crash when calling generics-based internal code when using a large number of threads (FJ, after debugging by Alexander Smirnov). - Fixed comparison of
grvectors withfmpqelements (FJ). - Fixed allocation bug in
gr_mpoly_mul_monomial(FJ). - Fixed aliasing in
fmpzi_divrem_approx(FJ). - Avoid division by zero in
acb_poly_refine_roots_durand_kerner: in rare instances, computing roots of an integer polynomial could hang (FJ). - Allow large arguments in
arb_atan_frac_bsplit(FJ). - Fixed printing large coefficients in
nmod_mpoly(Alexander Smirnov, AA). - Fixed
fq_*_poly_powmod(AA). - Fixed initialization of
fq_default_ctx(Claus Fieker, Tommy Hofmann). - Fixed memory leak in
gr_poly_write(FJ). - Fixed printing
nmod32elements on 32-bit systems (FJ). - Fixed
ldconfigfor BSD systems (AA). - Fixed
FLINT_WANT_ASSERTfor CMake (AA). - Fixed memory leak in
arb_nint(FJ).
- Fixed threading problem in
Performance
- FLINT is now built with
-O3 -march=nativeby default (AA). - FLINT is no longer built with
-funroll-loopsby default except for select modules. This reduces the library size by more than 20%. (AA). - Assembly routines are now used as intended on ARM64 when compiling with GCC (AA).
- New basecase code for
flint_mpn_mul,flint_mpn_mul_nandflint_mpn_sqr(generic C versions, assembly for x86-64). This can yield up to a 2x speedup over GMP for short integer multiplications when callingmpnfunctions directly, though few applications currently benefit significantly due to wrapper overheads (some Arb benchmarks run ~5% faster with this change) (AA, FJ). - Added hardcoded low-level routines for high multiplications of two operands of the same size for Broadwell-type CPUs –
flint_mpn_mulhigh_*andflint_mpn_sqrhigh_*(AA). - Added hardcoded low-level routines for high normalised multiplications of two normalised operands of the same size for Broadwell-type CPUs –
flint_mpn_mulhigh_normalised_*(AA). - Added
flint_mpn_mulhigh_basecaseandflint_mpn_sqrhigh_basecasefor Broadwell-type CPUs (AA). - Use toom22 on top of custom basecase code for intermediate operands in
flint_mpn_mul(FJ, based on GMP code). - Use
mulxinumul_ppmmwhen available (AA). - Faster
_fmpz_vec_dot(FJ). - Faster
_fmpz_mod_vec_dot(FJ). - Faster
fmpz_polyandfmpz_matbasecase algorithms based on dot products (FJ). - Optimized
fmpz_mat_mul_classical(FJ). - Added
fmpz_mat_mul_waksman, speeding upfmpz_matmultiplication for balanced matrices with huge entries (Éric Schost, Vincent Neiger, FJ). - Tweaks to improve GCC's code generation for
fmpz_mpolyandnmod_mpolymultiplication (FJ). - Improved
fmpz_mod_mat_set_fmpz_mat(FJ). - Improved tuning for
fmpz_mat_sqr(FJ). - Improved
fmpz_mat_sqr_bodratowith small coefficients (Marco Bodrato). - Squaring optimizations in
fmpz_mat_mul_multi_mod(FJ). - Use Bodrato's sequence for Strassen multiplication (Marco Bodrato).
- Strip trailing zeros in
fmpz_poly_gcd: this gives a 50x speedup computinggcd(x^1000, x^1001)(FJ). - Faster CLD bound computation, speeding up
fmpz_poly_factorfor some polynomials (FJ). - Use new formulas from Jorge Zuniga and Jesús Guillera to compute log(2), Catalan's constant, zeta(3) and gamma(1/3) faster (FJ).
- Compressed the database of Conway polynomials to 10% of the original size (AA).
- Optimized context initializers for
fq,fq_zech,fq_nmodandqadic(AA). - Avoid calls to the slow standard library function
ldexp(FJ). - Improved
fmpz_is_probabprimefor word-size input (FJ). - Make
gr_poly_resultantuse the quasilinear hgcd algorithm by default over finite rings and remove obsoletefmpz_mod_polyimplementations (FJ). - Optimized header files (AA).
- Changed several internal helper functions to forced inlines (AA).
- Merged some sources files to speed up compilation (AA).
- Faster computation of Swinnerton-Dyer polynomials (FJ).
- Added benchmark script (
dev/bench.py) that should be used to check performance increases and regressions (FJ). - Add special cases for Clang and MSVC in
longlong.h(AA).
- FLINT is now built with
Test code
- Unified test programs per module: compiling FLINT's test suite is now an order of magnitude faster (AA).
- Added pretty-printing and timing output for unit tests (AA).
- Improve use of test multiplier in some long-running unit tests (AA, FJ).
- Improved test coverage (AA, FJ).
- Allow
gr_ctx_init_randomto generate composite rings (FJ). - Fixed the test code of
fq_*_poly_powmod(AA).
Maintenance
- Require GMP >= 6.2.1 and MPFR >= 4.1.0 (AA).
- Drop support for Itanium (AA).
- Drop support for MPIR (AA).
- Cleaned up
longlong.h(AA). - Removed
ARB_VERSION,ANTIC_VERSION,CALCIUM_VERSIONand associated constants (AA). - Removed
_long_vec_printand_perm_print(useflint_printfinstead) (AA). - Removed unused functions in the
d_matandaprclmodules (AA). - Removed
fmpq_get_mpz_frac(AA). - Removed
arb_fmpz_poly_cos_minpoly(AA). - Removed
fmpz_mat_mul_classical_inline(FJ). - Removed
fmpz_mat_rref_mod(usefmpz_mod_mat_rrefinstead) (FJ). - Introduce
FLINT_SWAPmacro to replace several older macros (FJ). - Replaced
invert_limbbyn_preinvert_limb_prenorm(AA). - Renamed
_perm_set_oneto_perm_one(AA). - Only define some multithreaded "divides" function when the CPU is strongly ordered (AA).
- Enable
fft_smallfor MSVC builds (AA). - Use binary format instead of decimal format in
qsieve, removing the need of conversions between said formats (AA). - Use C11 atomics in the
fmpzmemory manager (AA). - Merged some repeated code in the
mpolymodules (FJ). - Refactored
fq_defaultto usegrgenerics internally (FJ). - Replaced more functions by generics-based versions (FJ).
- Do not include
pthread.hwhen opted out (AA). - Test ARM NEON in CI via Github's Apple M1 runner (AA).
- Test examples in CI (AA).
- Detect MPFR and GMP internals in configure (AA).
- Add
-lflintto PKG-CONFIG (Josh Rickmar). - Silence GCC compiler warnings (AA).
- Unified exception handling (AA).
- Corrected some function signatures in the documentation (Vincent Delecroix, Joel-Dahne, Edgar Costa).
- Rename the default Git-branch from
trunktomain(FJ). - Document some macros defined in
flint.h(AA). - Other code cleanup and modernisation (AA).
- Major cleanup in
configure.acandacinclude.m4. - Use parts of GMP's configuration to configure assembly properly.
- Change instances of
#ifdef FLINT_WANT_ASSERTto#if FLINT_WANT_ASSERT(AA).
Cite this page
The FLINT team, “FLINT 3.1,” FLINT: Fast Library for Number Theory, documentation, version 3.7.0-dev, 2026. https://flintlib.org/doc/history/flint3/v3-1.html (generated 2026-10-20).
@misc{flint-doc-history-flint3-v3-1,
author = {{The FLINT team}},
title = {{FLINT 3.1}},
howpublished = {FLINT: Fast Library for Number Theory, documentation, version 3.7.0-dev},
year = {2026},
url = {https://flintlib.org/doc/history/flint3/v3-1.html},
note = {Generated 2026-10-20}
}