mesh: platform-independent maths (libm) so meshes are bit-identical on macOS and Linux

The system maths library's sin, cos, atan2, log … are not correctly rounded and differ
between platforms: mesh.hex.generate gave the plate of the strong-relax test a different
mesh on Linux than on macOS (nodes from 2809 on), so the test passed on a Mac and failed
in CI. Every transcendental call in fieldcraft-mesh now goes through the libm crate (a
pure-Rust port of musl's), which gives the same bits everywhere.

Part of #438.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UhhZMBTviDQxZvwnyP89fo
This commit is contained in:
jyvikoandClaude Opus 5.5 authored and Irakli Kourtis committed 2026-10-16 18:30:00 -04:00
1 parent f297ffca3a
commit 700a7e3d10
15 files changed
+41 -30

No files matched your search

+1 -1
View File
@@ -65,7 +65,7 @@ enum Phase {
/// The objective's term for one element of quality `q` whose size went from `v0` to `v`.
fn phi(phase: Phase, q: f64, valid: bool, v: f64, v0: f64) -> f64 {
if valid && q > 0.0 {
let g = if v > 0.0 && v0 > 0.0 { (v / v0).ln() } else { 0.0 };
let g = if v > 0.0 && v0 > 0.0 { libm::log(v / v0) } else { 0.0 };
let shape = match phase {
Phase::Smooth => (1.0 / q - 1.0).powi(2),
Phase::MinMax => q.powi(-MIN_MAX_POWER) - 1.0,