Numérique et optimisation
L'exactitude que NumPy n'a pas, des décompositions de niveau LAPACK et la différentiation automatique ; pas un NumPy, par choix.
5 Strong · 5 Solid · 2 Partial · 0 Emerging
Mesuré contre : NumPy · Eigen · GSL · SciPy · Dossiers : base/number(s'ouvre dans un nouvel onglet) · base/optim(s'ouvre dans un nouvel onglet) · Pour les programmeurs : la référence de ce domaine

Repensé depuis les premiers principes
Ce que Softanza a gardé de ce qui marche, et ce qu'elle a repensé, tel que la bibliothèque l'a écrit dans ses documents de conception et ses narrations.
La manière SoftanzaUn nombre doit savoir s'il est exact et dire pourquoi quand il ne l'est pas ; le cadre qui infléchit un résultat doit être visible là où l'on s'en sert.
Gardé des meilleures pratiques
- Les nombres machine restent en double précision IEEE-754, avec l'arrondi au pair comme défaut annoncé, la règle comptable, car l'arrondi vers le haut fait dériver un long registre. source(s'ouvre dans un nouvel onglet)
- Des méthodes numériques classiques et stables par défaut : sommation compensée, moments de Welford et décompositions standard LU, QR, Cholesky et SVD. source(s'ouvre dans un nouvel onglet)
- Les résultats sont jugés face à des oracles de référence — NumPy et rationnels exacts — avec une tolérance tirée du conditionnement du problème, jamais une constante choisie à la main. source(s'ouvre dans un nouvel onglet)
Repensé
- Un seul type de nombre, aux formes internes multiples — entier, grand entier, rationnel, décimal — choisies automatiquement : le choix du type revient au système, pas à l'utilisateur. source(s'ouvre dans un nouvel onglet)
- Un nombre sait s'il est exact, et WhyNotExact() nomme ce qui a été perdu, car une surprise numérique vient presque toujours d'un cadre que l'appelant ne voyait pas. source(s'ouvre dans un nouvel onglet)
- Le régime voyage avec la valeur : la monnaie garde deux décimales avec l'arrondi bancaire, un nombre exact refuse de devenir approché, au lieu d'un réglage global hérité du dernier appel. source(s'ouvre dans un nouvel onglet)
- Un modèle d'optimisation s'écrit en objet, en phrase ou en fichier, tous construisant le même modèle, pour que deux surfaces ne divergent jamais en silence ; Why() nomme le solveur employé. source(s'ouvre dans un nouvel onglet)
The most rigorously measured module in the library: P0-P7 complete, ~1,827 assertions, every parallel route gated by a measured threshold and every kernel bit-identical under threads. It leads with something NumPy has no concept of, exactness: an arbitrary-precision numeric tower with a register that tells you why a value is exact or not. It reaches LAPACK-tier decompositions and ships reverse-mode autodiff with L-BFGS. It is deliberately not a NumPy: no broadcasting, raw matmul peak below tuned BLAS, and it refuses what it cannot measure a use for.
Ce qu'un artisan en fait, et ce qui se distingue
- An exactness register (IsExact, Why, Representation) that NumPy has no concept of
- General non-symmetric eigen with a Francis double-shift QR, hand-rolled and verified
- Reverse-mode autodiff paired with a real quasi-Newton (L-BFGS) optimizer
- Nothing parallel ships without a measurement; many gaps are deliberate, measured refusals
Ce qui est dû
- Arbitrary-N and multi-dimensional FFT (mixed-radix / Bluestein, rfft, 2-D)
- Complete the complex surface: log, inverse-trig and general powers
- Adaptive quadrature and an ODE stepper
- Broaden sampling distributions (binomial, Poisson, gamma, beta, Dirichlet)
La manière Softanza, exécutée
Ce que Softanza fait autrement dans ce domaine, montré par du code tiré de ses narrations et de ses gardes, et exécuté pour cette page.
Un divisé par trois ne prétend pas être exact, et le nombre dit lui-même pourquoi.
oThird = new stzNumber("1")
oThird.Divide("3")
Then("1 / 3 does NOT claim to be exact", oThird.IsExact(), FALSE)
Then("...and says why", StzFindFirst("does not terminate", oThird.Why()) > 0, TRUE)THEN 1 / 3 does NOT claim to be exact [PASS] THEN ...and says why [PASS]
exécuté le 2026-10-01 21:17 dans la bibliothèque au commit 0e72e2e2c ; tiré de base/test/number/numeric_exactness_narrated.ring(s'ouvre dans un nouvel onglet)
Un prix déclaré comme monnaie le reste : un taux appliqué donne deux décimales, pas 2,9985.
oPrice = StzMoneyQ("19.99")
oPrice.MultiplyBy("0.15")
Then("a rate applied to it lands on money, not 2.9985", oPrice.Content(), "3.00")THEN a rate applied to it lands on money, not 2.9985 [PASS]
exécuté le 2026-10-01 21:17 dans la bibliothèque au commit 0e72e2e2c ; tiré de base/test/number/numeric_regime_narrated.ring(s'ouvre dans un nouvel onglet)
Un problème d'optimisation écrit comme une phrase se résout comme le même modèle construit en code, et atteint 130.
oS = StzOptimNaturally("
maximize 3*x + 2*y
where x is between 0 and 40
and y is a whole number at least 0
keeping x + y under 50
and keeping 2*x + y under 80
")
oS.SolveWith(:auto)
? oS.Objective()130
exécuté le 2026-10-01 21:17 dans la bibliothèque au commit 0e72e2e2c ; tiré de base/test/optim/optim_modelling_narrated.ring(s'ouvre dans un nouvel onglet)
Les articles de ce domaine (4)
- Probabilistic Quantifiers in Softanza: Natural Proportions Meet Logical Precision 2025
- Matrix Computing in Softanza with stzMatrix 2025
- Empowering Real-World Applications with Softanza's Linear Solver for Haro 2025
- Practical Randomness in Softanza 2025
Les couloirs, un par un
Les couloirs et leurs notes sont cités tels qu'ils ont été lus à la source, le Read from the source on 2026-09-16.

