Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

0003: Portable results

Status: accepted.

Decision: one Fastmash version gives identical results for the same input and explicit settings on every supported machine, provided that the implementation meets the project’s accuracy and performance goals. Command compatibility with GNU datamash is kept, and specific numerical differences are assessed and documented one by one.

The alternative was to match whatever the local GNU datamash build prints. Different GNU builds can disagree in the last digit, so that target would be a moving one, while portable results give one expected answer that tests, users and CI can rely on. Matching the local GNU output byte for byte would ease some migrations; that benefit was judged smaller.

Current implementation: software 80-bit arithmetic that preserves GNU datamash’s precision, range and order of evaluation, with log and exp computed in software aiming for the correctly rounded result. The decision fixes the property, not this particular engine: precision, algorithms and dependencies may change, but any change to numerical output is versioned and listed in the changelog.

Consequences:

  • Fastmash can differ from a local GNU build in the last printed digit of some results, or the sign of a NaN. These differences are documented.
  • Some extreme inputs that cannot be computed within fixed limits are refused (see 0004).