Math operations
GET /api/fingerprint/math-precisionMath precision fingerprinting tests the accuracy and consistency of JavaScript mathematical operations across different browsers, platforms, and CPU architectures. Despite JavaScript's specification of IEEE 754 double-precision floating-point arithmetic, actual implementations exhibit subtle differences due to compiler optimizations, CPU instruction sets (x86 vs. ARM vs. RISC-V), JIT compiler behavior, and math library implementations. The technique performs complex mathematical operations (trigonometric functions, logarithms, exponentials, hyperbolic functions) with specific inputs, then captures results to extreme precision (15-17 significant digits). For example, Math.tan(Math.PI) should theoretically return 0, but actual implementations return tiny non-zero values that vary by platform: some return 1.2246467991473532e-16, others return -1.2246467991473532e-16. Testing Math.sin, Math.cos, Math.tan, Math.asin, Math.acos, Math.atan with edge-case inputs reveals implementation differences. Math constants like Math.PI, Math.E, Math.LN2 are computed differently by different math libraries. Advanced operations like Math.pow, Math.sqrt, Math.cbrt with specific inputs expose CPU instruction set differences: x86 processors with x87 FPU exhibit different rounding behavior than ARM processors with NEON. JavaScript engines (V8, SpiderMonkey, JavaScriptCore) optimize math operations differently, producing measurably different results. While differences are tiny (typically in the 15th decimal place), they're consistent and provide reliable fingerprinting entropy. This technique is impossible to fake without perfectly emulating another system's entire math stack.
Move from this collector to the CreepJS signal index, live checker, API docs, and other high-value fingerprinting explainers.