What it measures
A set of Math.* function results that expose how each JavaScript engine approximates transcendental functions. The floating-point values are fully deterministic within a given engine version but differ across V8, SpiderMonkey, and JavaScriptCore.
Results do not vary across hardware: the same engine on the same version always produces the same output regardless of CPU model. This makes the signal a clean engine discriminator with no hardware noise.
How it is collected
The chosen expressions are computed in order, serialised deterministically, and fed into xxHash64 to produce a 16-character hex hash. The raw number array is also returned as value for observability. The entire computation is synchronous and typically completes in under 1 ms with no yield points and no timeouts.
Confidence rules
| Confidence | Trigger |
|---|---|
| normal | Computation completed without exception |
| absent | Top-level catch fired (unexpected, since Math functions do not throw on normal inputs) |
Why engine-bound
Each JavaScript engine implements transcendental math functions independently. V8 uses its own polynomial approximations; SpiderMonkey may use platform-native libm on some systems or its own implementations; JavaScriptCore uses its own approximations. The chosen expressions are selected to amplify these differences, targeting boundary regions and code paths where argument reduction and large-exponent handling diverge across engines.
IEEE 754 requires results to be consistent within an engine regardless of JIT optimisation level, so the values are fully stable across sessions. A browser update that changes the math library can shift the fingerprint, but this is rare and detectable as a version-correlated event.
Last reviewed 2026-06-04

