Softanza
DémarrerEnglish
Softanza
Données et langage de base

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

un nuage de points de x au carré, famille des graphiques
un nuage de points de x au carré, famille des graphiques. rendu le 2026-10-01 à 04:00 par le script de rendu du site tools/areas.ring, exécuté dans la bibliothèque au commit 0e72e2e2c · la source(s'ouvre dans un nouvel onglet)

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.

Softanza
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)
Sortie
  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.

Softanza
oPrice = StzMoneyQ("19.99")
oPrice.MultiplyBy("0.15")
Then("a rate applied to it lands on money, not 2.9985", oPrice.Content(), "3.00")
Sortie
  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.

Softanza
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()
Sortie
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)

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.

Scalar arithmetic and exactness
Strong
Arbitrary-precision tower over std.math.big: bignum, exact rationals, money-exact decimal (0.1+0.2 is exactly 0.3), plus IsExact()/Why()/Representation()IsExact() / Why() / Representation()
Matrices and linear algebra
Strong
matrix.zig + linalg.zig: SIMD/threaded matmul, LU determinant, Solve, Inverse, LeastSquares, PseudoInverse (Penrose-4 verified), rank, condition; vs NumPymatrix.zig / linalg.zig vs NumPy oracle
Eigen and decompositions
Strong
Symmetric Jacobi eigen plus general non-symmetric eigen (balancing, Hessenberg, Francis double-shift QR, Schur), Jacobi SVD, Householder QR, Cholesky, rootseigen_general.zig
Automatic differentiation and optimization
Strong
Reverse-mode autodiff (compiled tape, valueAndGradient) and L-BFGS with strong-Wolfe line search; verified to 8-12 decimals; Rosenbrock in 34 iterationsautodiff.zig / lbfgs.zig
Acceleration and residency
Strong
SIMD + row-banded threaded matmul (16x cache reorder, up to 7x threaded), Neumaier summation (2.5x), resident reductions 19x; every route gated by calib.Gatecalib.Gate thresholds; bit-identical under threads
Vectors and buffers
Solid
stzNumBuffer over numbuf.zig: an engine-owned f64 buffer with dot/scale/add/sub/mul and reductions that never marshal; no broadcasting, no n-D arraysnumbuf.zig
Linear and integer programming
Solid
Engine simplex (41x after a cubic re-parse fix) with branch-and-bound MIP, stzOptimModel DSL, exact coefficient compiler, .zopt round-trip; no IPM, no QPsimplex.zig; base/optim
Special functions
Solid
special.zig: erf/erfc, log-gamma and gamma, incomplete gamma and beta, Normal/t/chi-square/F CDFs and quantiles; no Bessel, Airy, elliptic or hypergeometricspecial.zig
Solvers and roots
Solid
solver.zig: linear and quadratic roots, bisection, Newton, Simpson integration, polynomial eval, lerp/clamp/map-range; no adaptive quadrature, no ODE/BVPsolver.zig
Random and sampling
Solid
random.zig over Xoshiro/PCG/ChaCha: seeded ints, floats, Gaussian, exponential, shuffle, Bernoulli, weighted choice under SeedRandom; no binomial/Poisson/gammarandom.zig
FFT and spectral
Partial
fft.zig: radix-2 Cooley-Tukey with the NumPy fft/ifft convention, convolveReal, magnitudes, phases, power spectrum; radix-2 only, no rfft, no multi-dimensionalfft.zig
Complex numbers
Partial
complex.zig: arithmetic, modulus (hypot), argument, conjugate, principal sqrt and exp, division via Smith's formula; no log, inverse-trig or general powerscomplex.zig