Bit-exactness & parity¶
parsecore’s star ratings and pp values are bit-for-bit identical to the official osu! implementation. This is the project’s core promise.
How it’s achieved¶
Reproducing the reference closely is not enough parsecore reproduces it exactly, including the floating-point behaviour of the original:
f32 intermediates positions, curve math and several constants are computed in 32-bit floats, matching the game client (and rosu-pp’s Rust
f32).Explicit integer powers
x * x * xwhere the reference usesDiffUtils.Pow(x, 3), notmath.pow(they can differ in the last bit).IEEE semantics division by zero, NaN handling and negative-base powers follow Rust/C# rules via dedicated helpers (
ieee_div,rust_min, …), never Python’s exceptions.Exact RNG and sorting the legacy converters use osu!stable’s RNG in the exact call order, and the C# unstable sort is reproduced for nested slider objects.
How it’s verified¶
Correctness is enforced by a parity test suite that compares parsecore against an oracle
built from the official ppy.osu.Game packages (with rosu-pp as a secondary cross-check):
4,400+ cases: star ratings and pp across all four rulesets
extended mod matrix (EZ/HR/DT/NC/HT/HD/FL/TD/RX/AP/SO, key mods 1K-9K, combinations)
all convert directions, native maps, edge-case and pathological maps
randomized full score states, partial states, fails, lazer & stable scores
result: 0 differences every value bit-identical to the official implementation
Important
After a pp rework deploys, public calculators and bots that rely on outdated libraries can disagree with parsecore. When in doubt: new scores set in-game receive exactly the values parsecore computes.