Home Developers Evidence math.percentage

Public evidence

math.percentage

Machine-checked verification for calculation version 1.1.1 · tier engine_tested

CVP: CVP VERIFIED · CVP protocol 1.0.0-proposed · Core assurance· SI percent = 0.01; modes of / is-what / of-what / change / adjust-up / adjust-down / difference · Protocol · Schema · Production report

Declared partition coverage
PASS · 9/9 declared partitions (of, is-what, of-what, change, adjust-up, adjust-down, difference, invalid-domain, xcal)
Versions
Calculation 1.1.1 · CVP protocol 1.0.0-proposed · Evidence 2026-09-08.xcal
Verification revision
2026-09-08.xcal · 2/2 property · digest e1b745d88212

Verification

Legacy regression suite: 19/19 calculation tests · Production surface contract 3/3

Three distinct suites: educational examples on the calculator page, this legacy regression count (19/19 golden + boundary), and the CVP verification suite below. They are not the same number. Property, metamorphic, round-trip, O3, and interface statuses/checks are recorded in the CVP Manifest . SKIP (0/0) means that suite has no published vectors.

    This calculator CURRENT · Public schema 1.1.1 matches · Semantic contract ✓ · Production attested · Public/cache ✓ · Origin ✓

CVP verification suite

Protocol checks from the Evidence Manifest. Distinct from the legacy regression suite above. Verification revision 2026-09-08.xcal. Calculation version 1.1.1. CVP 1.0.0-proposed. 2/2 golden · 7/7 CVP boundary · 7/7 invalid · 2/2 property · 2/2 metamorphic · 2/2 round-trip · 1/1 cross-interface · 3/3 cross-calculator · 1/1 CVP contract. digest e1b745d88212.

  • Golden (oracle-backed) 2 / 2
  • CVP boundary 7 / 7
  • Invalid input 7 / 7
  • Property 2 / 2
  • Metamorphic 2 / 2
  • Round-trip 2 / 2
  • Cross-interface 1 / 1
  • Cross-calculator 3 / 3
  • CVP contract 1 / 1
  • Interfaces PASS · UI (SSR) / REST / MCP
  • Interface claim ui-ssr is query-result HTML, not a live browser session.
  • Assurance Core
  • release artifacts aligned PASS
  • schema valid input executes PASS
  • engine success output validates schema PASS

Fingerprint sha256:43a3601fe3d15428d83cc6f727320b8d989bb2e6bb877edd058c45853c2458a3

Input schema sha256:188e4f67b78437338e3f56cb4e7e82003b521697af6707b04fa75321ca920f39 · Output schema sha256:14cbd02203cf735e07c23bf387ea886fc53cd9e9419602643dd6d69f34d95c56 · Build-time SHA-256 digests prove published artifacts agree with each other (release_integrity.scope=workspace). Production attestation GETs canonical URLs twice (public/cached view and origin), including Capability HTML, via npm run attest:production --write (published at /.well-known/calculatorx-production-attestation.json) and fails if the public Capability page advertises a different calculation_version. This is artifact consistency, not an independent immutable release log.

Build & scope

Engine identity and declared limitations.

Tool
percentage
Engine
percentage
Engine build
2026-09-10
Evidence core
2026-09-10T22:48:17.762Z
Rendered
2026-09-16T22:03:43.774Z
Last reviewed

Assumptions

  • Interactive evaluation runs locally in the browser. Shared URLs and REST evaluate the same versioned engine (query SSR).
  • Denominators (whole, old, average of A and B, P) must be nonzero where required.
  • Percent change uses |old| in the denominator (signed increase/decrease). Typically used with a nonzero baseline; old = 0 is undefined.
  • Percentage difference is defined for A ≥ 0, B ≥ 0, and A+B ≠ 0.

Limitations

  • Percent change uses |old| denominator; old = 0 undefined
  • Percentage difference requires non-negative a, b → VALUE_MUST_BE_NON_NEGATIVE
  • Missing fields → MISSING_REQUIRED_INPUT

Sources

Standards and references supporting this tool specification. Methods are listed separately — they are algorithms, not bibliographic sources.

Legacy published checks

Golden and boundary cases from the legacy Evidence JSON. CVP property, metamorphic, round-trip, O3, and interface statuses/checks are recorded in the Manifest — including SKIP when a suite has no vectors.

IDKindStatusDetail
pct-ofgoldenpassExpected 50 · Actual value=50 · mode=of · mode_label=P% of X · heading=20% of 250 · explainer=20% of 250 equals 50. · inputs_summary=P=20% · X=250 · formula=Y = X × P / 100 · status=success
pct-of-share-aliasesgoldenpassExpected 50 · Actual value=50 · mode=of · mode_label=P% of X · heading=20% of 250 · explainer=20% of 250 equals 50. · inputs_summary=P=20% · X=250 · formula=Y = X × P / 100 · status=success
is-whatgoldenpassExpected 25 · Actual value=25 · mode=is-what · mode_label=X is what % of Y · heading=Percent · unit=% · explainer=50 is 25% of 200. · inputs_summary=X=50 · Y=200 · formula=P = 100 × X / Y
ui-whatgoldenpassExpected 25 · Actual value=25 · mode=is-what · mode_label=X is what % of Y · heading=Percent · unit=% · explainer=50 is 25% of 200. · inputs_summary=X=50 · Y=200 · formula=P = 100 × X / Y
of-whatgoldenpassExpected 60 · Actual value=60 · mode=of-what · mode_label=X is P% of what · heading=Whole · explainer=12 is 20% of 60. · inputs_summary=X=12 · P=20% · formula=Y = 100 × X / P · status=success
changegoldenpassExpected 25 · Actual delta=10 · value=25 · mode=change · mode_label=Percent change · heading=Percent change · unit=% · explainer=increase: 40 → 50 is 25%. · inputs_summary=40 → 50
change-abs-oldgoldenpassExpected 50 · Actual delta=50 · value=50 · mode=change · mode_label=Percent change · heading=Percent change · unit=% · explainer=increase: -100 → -50 is 50%. · inputs_summary=-100 → -50
adjust-upgoldenpassExpected 550 · Actual value=550 · mode=adjust-up · mode_label=Increase by % · heading=Increased value · explainer=500 increased by 10% equals 550. · inputs_summary=X=500 · P=10% · formula=Y = X × (1 ± P/100) · status=success
adjust-downgoldenpassExpected 450 · Actual value=450 · mode=adjust-down · mode_label=Decrease by % · heading=Decreased value · explainer=500 decreased by 10% equals 450. · inputs_summary=X=500 · P=10% · formula=Y = X × (1 ± P/100) · status=success
differencegoldenpassExpected 50 · Actual value=50 · mode=difference · mode_label=Percent difference · heading=Percent difference · unit=% · explainer=Relative difference of 10 and 6 is 50% of their average. · inputs_summary=A=10 · B=6 · formula=Δ% = 100 × |A − B| / ((A + B) / 2)
diff-negativeboundarypassExpected VALUE_MUST_BE_NON_NEGATIVE · Actual VALUE_MUST_BE_NON_NEGATIVE
change-old-0boundarypassExpected DIVISION_BY_ZERO · Actual DIVISION_BY_ZERO
is-what-y-0boundarypassExpected DIVISION_BY_ZERO · Actual DIVISION_BY_ZERO
of-what-p-0boundarypassExpected DIVISION_BY_ZERO · Actual DIVISION_BY_ZERO
diff-both-zeroboundarypassExpected DIVISION_BY_ZERO · Actual DIVISION_BY_ZERO
of-nanboundarypassExpected INVALID_NUMBER · Actual INVALID_NUMBER
of-hugegoldenpassExpected 200000000000000 · Actual value=200000000000000 · mode=of · mode_label=P% of X · heading=20% of 1.000000e+15 · explainer=20% of 1.000000e+15 equals 2.000000e+14. · inputs_summary=P=20% · X=1.000000e+15 · formula=Y = X × P / 100 · status=success
change-tinygoldenpassExpected 100 · Actual delta=1e-8 · value=100 · mode=change · mode_label=Percent change · heading=Percent change · unit=% · explainer=increase: 1.000000e-8 → 2.000000e-8 is 100%. · inputs_summary=1.000000e-8 → 2.000000e-8
boundary-pct-diff-negboundarypassExpected VALUE_MUST_BE_NON_NEGATIVE · Actual VALUE_MUST_BE_NON_NEGATIVE