{"calculator":{"slug":"race-time-predictor","math":{"href":"https://www.tracktoolspro.com/api/calculators/race-time-predictor","jsonPointer":"/calculator/math","version":"2026-10-21.1","implementationVersion":"b5a8aca7b85361476e0321a08b7fa5f516fc9535","scope":"Canonical HTTP function and documented corresponding mounted-form math. This is public inspectable documentation, not access control or independent empirical validation.","unitNotation":"Input paths use [] and *; output paths are JSON Pointers with * (one segment) and ** (descendants). Empty output path denotes scalar result. Units apply to numeric quantities or explicitly described numeric strings; labels/statuses/booleans are dimensionless. More specific units, including count/index exceptions, override broad patterns.","interfaceNotes":["HTTP input is described by the adjacent inputSchema. The original handlers may accept numeric strings; this metadata adds no validation.","Mounted forms accept displayed clock/unit strings and enforce their own limits. Mounted tools limit strings to 200 characters and numeric parts to magnitude 1000000. Do not assume mounted/API input interchangeability.","Some legacy extreme/invalid tuples can produce null/empty results or nonfinite numbers serialized as null. Those are unavailable answers, not exact numerical predictions. Per-calculator domain describes the intended mathematical inputs."],"kind":"empirical-model","implementationFiles":["lib/formulas/riegel.ts"],"equations":["prediction.seconds=timeSeconds*(targetMeters/distanceMeters)^exponent; pacePerMileSeconds=prediction.seconds*1609.34/targetMeters; pacePerKmSeconds=prediction.seconds*1000/targetMeters."],"inputUnits":{"timeSeconds":"s","distanceMeters":"m","exponent":"dimensionless fatigue exponent"},"outputUnits":{"/*/meters":"m","/*/seconds":"s","/*/pacePerMileSeconds":"s/mile","/*/pacePerKmSeconds":"s/km"},"domain":["Positive finite distance/time; API exponent1.02..1.12 (default 1.06).","Legacy invalid reference values may return arrays of NaN-valued predictions; JSON serializes those numbers as null. They are unavailable results, not valid race times."],"rounding":["Raw IEEE-754 numbers; the mounted page formats clocks separately."],"assumptions":["Uses the entered values and the selected convention; this documentation does not strengthen existing validation."],"limitations":["Power-law extrapolation, not universal prediction accuracy or a validated athlete classification. The default exponent is a convention."],"mountedPageNotes":[],"workedExamples":[{"input":{"timeSeconds":1200,"distanceMeters":5000,"exponent":1.06},"expected":{"/0/seconds":172.00791345301917},"absoluteTolerance":1e-8,"note":"Illustrative canonical-handler result; not independent validation of an empirical model."}],"constantsAndTables":{"defaultExponent":1.06,"exponentPresets":[{"value":1.05,"label":"Less slowing","description":"Less slowing for targets longer than the reference"},{"value":1.06,"label":"Standard","description":"Existing comparison default"},{"value":1.08,"label":"More slowing","description":"More slowing for targets longer than the reference"}],"outputDistances":[{"id":"800m","label":"800m","meters":800},{"id":"1500m","label":"1500m","meters":1500},{"id":"mile","label":"Mile","meters":1609.34},{"id":"1600m","label":"1600m","meters":1600},{"id":"3000m","label":"3000m","meters":3000},{"id":"3200m","label":"3200m","meters":3200},{"id":"2mile","label":"2 Mile","meters":3218.69},{"id":"5k","label":"5K","meters":5000},{"id":"6k","label":"6K","meters":6000},{"id":"8k","label":"8K","meters":8000},{"id":"10k","label":"10K","meters":10000},{"id":"half","label":"Half Marathon","meters":21097.5},{"id":"marathon","label":"Marathon","meters":42195}],"metersPerMile":1609.34},"sources":[{"title":"Canonical HTTP binding at the documented implementation revision","url":"https://github.com/wickthumb/track_tools_pro_marketing/blob/b5a8aca7b85361476e0321a08b7fa5f516fc9535/lib/calculator-functions.ts","note":"Existing calculation handler; math metadata is additive."},{"title":"lib/formulas/riegel.ts","url":"https://github.com/wickthumb/track_tools_pro_marketing/blob/b5a8aca7b85361476e0321a08b7fa5f516fc9535/lib/formulas/riegel.ts","note":"Primary implementation source for these equations/tables, not a claim of scientific calibration."},{"title":"Riegel, Athletic Records and Human Endurance,1981","url":"https://rrtc.net/Articles/ARHE.pdf","note":"Riegel 1981 primary article; fitted exponents vary. Product default 1.06 is an explicit convention, not a universal accuracy claim. Retained source reviewed 2026-10-16."}]},"annotations":{"readOnlyHint":true,"consequentialHint":false},"name":"Riegel Race Time Predictor","description":"This race time predictor uses the classic Riegel formula — T2 = T1 × (D2 ÷ D1)^1.06 — to turn one recent race into predicted times at 800m through the marathon, with pace per mile and per kilometer. Unlike black-box race equivalency calculators, the formula is shown on the page and the fatigue exponent is adjustable (1.02–1.12), so speed-type and endurance-type runners can tune predictions to match how they actually race.","category":"Pace & Time","method":"POST","endpoint":"/api/calculators/race-time-predictor","page":"/calculators/race-time-predictor","inputSchema":{"type":"object","required":["timeSeconds","distanceMeters"],"properties":{"timeSeconds":{"type":"number","description":"Known race time in seconds.","minimum":0},"distanceMeters":{"type":"number","description":"Known race distance in meters.","minimum":0},"exponent":{"type":"number","description":"Riegel exponent.","default":1.06,"minimum":1.02,"maximum":1.12}}},"example":{"timeSeconds":1200,"distanceMeters":5000,"exponent":1.06}}}