Numerus et la même réponse deux fois
The bug that only exists on the other machine
The most irritating numeric bug is the one that refuses to appear where you are looking. The test fails on CI, not locally. The simulation drifts after a dependency update. The embedded target produces a slightly different result from the server. The model pipeline looks fine until replay asks for the same calculation twice and receives two answers that are close enough to start an argument.
Close is sometimes fine. Close is not always a contract. If a calculation is part of a replay path, a safety check, a simulation, a pricing decision, a digital twin, an audit trail, or a model compression step, then close can turn into a product risk. The difference may be tiny. Tiny differences are still differences. Software has made entire careers out of being offended by tiny differences.
This is the reason Numerus exists in the Dweve stack. The Numerus page frames it as an open-source numeric foundation for deterministic arithmetic: binary and decimal fixed-point, Dweve AXIOM adaptive variable-point math, integer-oriented operation, Rust, no_std-capable surfaces, verification against high-precision references where meaningful, and deterministic profiles intended to make replay calmer across supported targets. The shared common numeric layer underneath is wider still: binary, ternary, integer, fixed, float, and adaptive AXIOM families under one Element-style contract. The exact implementation details matter to engineers. The product lesson is simpler: arithmetic is not background noise. It is infrastructure.
That sounds obvious until you follow where numbers travel. A simulation feeds a digital twin. The twin feeds a dashboard. The dashboard informs a human decision. The decision is recorded. A month later somebody asks why. If the numeric layer cannot reproduce the calculation,the rest of the evidence chain becomes wobbly. It may still be defensible, but now the team has to explain an avoidable source of drift. That is a bad hobby.
Floating point is not morally wrong
This is not a sermon about floating point being evil.Floating point is one of the reasons modern computing works. It is fast, compact, well supported, and exactly right for many workloads. The problem starts when teams pretend its behaviour is a universal governance contract.
Floating point lives in a worldof rounding modes, hardware differences, compiler choices, instruction selection, fused operations, vectorization, denormals, library behaviour, and target-specific details. Most of the time this is manageable. Sometimes it is even invisible. Then you need bit-exact replay, or cross-target parity, or deterministic simulation, or a build that should behave the same after being moved from server to edge. Suddenly the details stop being academic. They become a meeting.
Numerus takes a different path for workloads where repeatability matters more than pretending every operation is a tiny weather system. Integer-only arithmetic makes the representation explicit. Fixed-point formats define where the decimal lives. Decimal families handle values where exact places matter. Dweve AXIOM gives a way to adapt exponent shape per value without handing control back to an opaque floating environment. The point is not one numeric form forever. The point is choosing a form with a contract.
That matters because product systems do not onlycompute. They remember. They replay. They compare. They explain. If the same calculation produces different results across supported surfaces, the difference becomes part of the product whether anyone planned it or not.
One numeric library is really several promises
A numeric foundation is not one thing. It is a set of promises with different audiences. The embedded engineer cares that constrained targets can run the relevant integer-oriented profiles without dragging in a comfortable server runtime. Thesimulation engineer cares that replay can reproduce a state. The audit person cares that the answer path can be explained. The product owner cares that the thing does not behave like a nervous calculator when moved from one environment to another.
The public Numerus page spotlights the families most people ask about first: Q-format fixed-point, Decimal and AXIOM. The codebase is broader. common/numeric carries binary XNOR and POPCNT forms, ternary values, native and sub-byte integers, fixed-point aliases, small float formats and adaptive AXIOM. The Numerus facade then adds the product-facing decimal and arithmetic surfaces around that foundation. That division matters because it avoids the fake elegance of forcing every number into one costume.
This is a very European kind of engineering in the best sense. Less drama, more contract. The calculation should state what it is. The range should be known. The decimal behaviour should be explicit. The target constraints should be respected. The result should be reproducible. Nobody needs a keynote for that. They need it to work.
AXIOM is worth its own article because it is not just another alias in the list. It is Dweve's adaptive variable-point family: sign, exponent index and mantissa packed into a compact representation, with exponent lists selected for general, dense, fine-grained or neural-network-shaped data. This post only places it in the Numerus map. The deeper story is how adaptive exponent selection gives changing magnitudes more room without making arithmetic non-deterministic again.
Italso prevents overclaiming. Numerus does not make every numeric problem easy. It does not remove the need to choose scales, ranges, rounding behaviour, exponent lists, mantissa widths or verification domains. Fixed-point and variable-point arithmetic can both be misused with great enthusiasm. The value is that the misuse becomes more visible. An explicit numeric contract gives you something to review. A hidden floating assumption gives you a small ghost in production.
Verification is not a badge
Every numeric library eventually learns that words like correct and precise are cheap until attached to a harness. Correct where? Precise compared with what? Over which input domain? With which rounding behaviour? On which release? Under which tests?
The Numerus material puts verification in the foreground: integer-only CORDIC for transcendental functions, comparison against a high-precision MPFR oracle, property tests, and release checks. The exact claim is only meaningful when tied to that machinery. A badge that says accurate is decoration. A harness that compares, shrinks, and fails is engineering.
Cette distinction compte parce que les bugs numériques se cachent souvent aux limites. Le milieu du domaine se comporte bien. La démo se comporte bien. Les valeurs ordinaires se comportent bien. Puis la valeur limite arrive avec son porte-bloc. Les entrées négatives, les valeurs proches de zéro, les limites de débordement, les transitions d'échelle, les égalités d'arrondi, les limites de listes d'exposants et les opérations répétées sont là où les bibliothèques numériques gagnent la confiance ou commencent à écrire de la fiction.
Les tests de propriétés sont utiles parce que les humains sont mauvais pour imaginer toutes les façons dont un nombre peut être agaçant. Un oracle de haute précision est utile parce que l'implémentation a besoin d'une référence qui n'est pas elle-même. Les vérifications de version sont utiles parce qu'une affirmation vérifiée le mois dernier n'est pas une garantie pour ce mois-ci. Le logiciel ne reste pas correct par politesse.
Le déterminisme appartient à l'architecture, pas à une note de bas de page
Il est tentant de traiter l'arithmétique déterministe comme un détail de bibliothèque de bas niveau. C'est là que beaucoup d'équipes la perdent. Au moment où le produit a besoin de relecture, les hypothèses numériques sont déjà réparties entre les services, les notebooks, les cibles embarquées, les outils de modélisation et les tests d'intégration. Puis le déterminisme devient une modernisation. Les modernisations sont là où les budgets vont développer du caractère.
Le bon moment pour décider de la posture numérique est tôt. Cette charge de travail a-t-elle besoin d'une relecture stable au bit près ? Traverse-t-elle des machines ? Traverse-t-elle des architectures ? Soutient-elle une décision réglementée ? Alimente-t-elle une simulation ? Devient-elle des données d'entraînement, une entrée d'inférence, une sortie de compression de modèle ou un état de jumeau numérique ? Si oui, l'arithmétique est architecturale.
Numerus s'intègre à côté de FMI et Twin exactement pour cette raison. FMI s'occupe des noyaux de simulation déterministes et de l'échange de modèles. Twin s'occupe de rejouer l'état opérationnel ou physique au fil du temps. Ledger enregistre les événements opérationnels. Trace transporte des preuves de calcul rejouables. Ces couches ne deviennent plus calmes que lorsque la couche numérique en dessous ne dérive pas comme un chariot avec une roue cassée.
Dans les systèmes d'IA, cela devient encore plus concret. La quantification, le scoring, le classement, la simulation, les contraintes, l'étalonnage, la compression et la relecture utilisent tous des nombres. Si ces nombres se comportent différemment selon les environnements, le modèle n'est peut-être pas le coupable. Il est simplement le suspect le plus visible. Pratique, mais pas toujours correct.
Les petites machines ne sont pas des citoyens de seconde zone
Beaucoup d'architecture d'IA et de simulation suppose tranquillement une machine confortable. Il y aura un serveur. Il y aura un GPU. Il y aura assez de mémoire. Il y aura un service cloud. Il y aura une facture qui fait inventer à quelqu'un l'expression investissement stratégique.
Les systèmes réels sont moins ordonnés. Certains calculs doivent s'exécuter sur des cibles embarquées. Certains vivent à la périphérie. Certains se trouvent dans des appareils sans unité en virgule flottante. Certains nécessitent une compatibilité no_std. Certains doivent continuer à fonctionner quand le réseau n'est pas invité. Si la fondation numérique ne se comporte que dans le cas confortable, ce n'est pas une fondation. C'est du mobilier.
L'arithmétique entière aide ici, car elle réduit la dépendance au comportement flottant spécifique à la cible lorsque la charge de travail peut utiliser ces profils. Les surfaces compatibles no_std aident, car tous les environnements ne disposent pas du luxe de la bibliothèque standard d'un processus serveur. Il ne s'agit pas de nostalgie pour des machines plus petites. Il s'agit de contrôler quel contrat numérique voyage vers des cibles contraintes.
Ce n'est pas de la nostalgie pour des machines plus petites. C'est une question de contrôle. Si le calcul fait partie du produit, le produit ne devrait pas exiger l'environnement le plus confortable pour être digne de confiance.
L'exemple ennuyeux est celui qui compte
Imaginez un calcul de dosage, un calcul de tarif, une étape de simulation, une valeur de capteur rejouée ou un seuil de compression de modèle. Rien de tout cela ne semble glamour. Tant mieux. Le glamour est généralement là où les approximations commencent. Les exemples ennuyeux sont ceux où la déterminisme numérique prouve sa valeur.
Si le résultat est utilisé une fois puis oublié, une petite dérive peut ne pas avoir d'importance. Si le résultat est enregistré et rejoué, elle en a. S'il est comparé entre environnements, elle en a. S'il alimente une décision ultérieure, elle en a. Si un client, un auditeur ou un ingénieur peut demander pourquoi cette valeur est apparue, elle en a définitivement. À ce stade, le calcul n'est plus un simple détail d'implémentation interne. Il fait partie de l'histoire que le produit raconte.
C'est pourquoi Numerus n'est pas qu'une simple bibliothèque mathématique abstraite. C'est un composant d'une architecture de preuves. Il offre aux autres systèmes une couche numérique plus stable sur laquelle s'appuyer. Reed peut analyser le code source avec des reçus. Ledger peut enregistrer des événements. BitWeave peut rendre la récupération déterministe. HEDL peut rendre les données structurées moins gaspilleuses. Numerus rend l'arithmétique moins glissante. Chaque pièce élimine un endroit où le système pourrait autrement hausser les épaules.
La leçon
La leçon de Numerus est que les nombres sont un comportement produit. Pas seulement un détail d'implémentation. Pas seulement des mathématiques. Un comportement. Si la même entrée peut produire une réponse différente lorsqu'elle est déplacée vers un autre environnement pris en charge, cette différence appartient désormais au produit.
L'arithmétique déterministe n'est pas toujours requise. Lorsqu'elle l'est, elle doit être conçue dès le départ plutôt que d'être exigée plus tard. Choisissez des familles numériques explicites. Vérifiez par rapport à un oracle. Testez les cas limites. Respectez les contraintes de déploiement. Gardez la relecture à l'esprit avant que le premier rapport d'incident ne rende tout le monde soudainement philosophe.
Numerus est utile parce qu'il transforme l'arithmétique en un contrat sur lequel le reste de la pile peut compter. Binaire, ternaire, entier, fixe, flottant, Decimal et AXIOM ne sont pas des slogans. Ce sont des moyens de façonner les nombres pour que la même réponse puisse apparaître deux fois, intentionnellement. AXIOM a sa propre histoire plus profonde, car c'est la partie où le point lui-même commence à bouger tandis que le contrat reste déterministe. Ce n'est pas tape-à-l'œil. C'est mieux que tape-à-l'œil. C'est le genre d'ennui qui permet aux systèmes sérieux de dormir tranquilles.