Skip to content

blog(one-ulp): "One ulp of doubt" — the f32/f64 verification story - #136

Merged
avrabe merged 2 commits into
mainfrom
blog/one-ulp-of-doubt
Jul 22, 2026
Merged

blog(one-ulp): "One ulp of doubt" — the f32/f64 verification story#136
avrabe merged 2 commits into
mainfrom
blog/one-ulp-of-doubt

Conversation

@avrabe

@avrabe avrabe commented Jul 22, 2026

Copy link
Copy Markdown
Contributor

Adds content/blog/2026-07-22-one-ulp-of-doubt.md — an engineering-notes post on the Falcon floating-point work (falcon-v1.123 → v1.127).

The story: a colleague asks whether the flight-control floats should be 32- or 64-bit; the honest answer is that 32-bit is the requirement (the M4's FPv4-SP has no f64 hardware — matching PX4/ArduPilot), but it was tribal knowledge. Three tiers of assurance follow, each catching what the last missed:

  1. A CI gate enforcing f32 discipline — and Kani rejecting our first covariance floor because +∞ escaped a naive check.
  2. An exhaustive sweep — all ~2.2 billion in-envelope f32 vs an f64 reference — finding the worst case (and the near-zero ulp artifact) the 4M-point sample had hidden.
  3. A machine-checked proof — Gappa → Flocq → coqc, tight at 2⁻²⁴, non-vacuous (rejects 2⁻²⁵), a required gate.

Keeps the section most write-ups omit: what we did not prove (the Coq-Interval approximation layer, the reduction cancellation) and the notch fragility the kernel merely revealed — because that honesty is the point.

  • Follows CONTRIBUTING: +++ TOML frontmatter, {% insight() %} opener, {% note() %} callouts, ## headings for the auto-TOC.
  • draft = true, ready = false — private draft, held from autopublish; flip when you want it live.
  • zola build passes locally; the only broken external links zola check reports are pre-existing in other posts, none in this one.
  • Authored in a worktree off origin/main so no other in-progress branch was touched.

🤖 Generated with Claude Code

https://claude.ai/code/session_01HvusAXYbHLyv3uTzfBcMbG

Ralf Anton Beier and others added 2 commits July 22, 2026 11:39
A colleague's question — 32-bit floats or 64? — traced through three tiers
of assurance on the Falcon flight-math kernels: a CI gate enforcing f32
discipline (Kani catching a wrong covariance safe-value), an exhaustive
2.2e9-input accuracy bound (finding what the 4M sample hid near zero), and
a machine-checked Gappa→Flocq→coqc rounding proof (tight at 2^-24,
non-vacuous). Kept honest about what is NOT proven (the Coq-Interval
approximation layer, the reduction cancellation) and the notch fragility
the kernel merely revealed.

Draft (draft = true, ready = false) — held from autopublish for review.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HvusAXYbHLyv3uTzfBcMbG
@avrabe
avrabe enabled auto-merge (squash) July 22, 2026 11:22
@avrabe
avrabe disabled auto-merge July 22, 2026 13:20
@avrabe
avrabe enabled auto-merge July 22, 2026 13:21
@avrabe
avrabe disabled auto-merge July 22, 2026 13:21
@avrabe
avrabe merged commit 66e1026 into main Jul 22, 2026
1 check passed
@avrabe
avrabe deleted the blog/one-ulp-of-doubt branch July 22, 2026 13:25
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant