{
  "schemaVersion": 1,
  "slug": "horsepower-calculator",
  "category": "automotive",
  "kind": "implementation",
  "independentValidation": false,
  "implementationHash": "89667e62277a3a12d68aa86f911566322bf1ab59469f9b5cd94bad00f41280cc",
  "provenance": "Generated from the calculation contract used by the published page. Publication is not external validation.",
  "sourceFiles": [
    "data/calculators/horsepower-calculator.json",
    "src/engine.js"
  ],
  "runtimeSource": "/sources/engine.txt",
  "runtimeHash": "5c888d8898afbdee36267bb9977829e1e2ac568f6677c8ee87469c139864645c",
  "scope": "The compute function records implemented equations, constants, lookup tables and custom rules. Inputs record defaults and allowed values; outputs record precision and units. Defaults are examples, not recommendations. General background references are not evidence for this specific algorithm.",
  "publishedFormula": {
    "formula": "HP = T × RPM ÷ 5252 ; WHP = HP × (1 − D ÷ 100) ; t = 5.825 × (W ÷ WHS)^(1/3)",
    "vars": [
      [
        "T",
        "torque (lb·ft)"
      ],
      [
        "RPM",
        "engine speed"
      ],
      [
        "D",
        "drivetrain loss (%)"
      ],
      [
        "W",
        "vehicle weight (lb)"
      ],
      [
        "WHS",
        "wheel horsepower"
      ]
    ],
    "note": "Kilowatts = HP × 0.7457; power-to-weight = HP ÷ W. Quarter-mile time t in seconds; estimate only."
  },
  "externalEvidence": {
    "reviewedAt": "2026-10-28",
    "sources": [
      {
        "name": "OpenStax — Rotational power and angular velocity",
        "url": "https://openstax.org/books/university-physics-volume-1/pages/10-8-work-and-power-for-rotational-motion"
      }
    ],
    "referenceRole": "definition",
    "implementationHash": "89667e62277a3a12d68aa86f911566322bf1ab59469f9b5cd94bad00f41280cc",
    "basis": "HP_crank = T × rpm ÷ 5252; HP_wheel = HP_crank × (1 − L ÷ 100) P1 consolidation retains the core model and adds input modes or derived outputs. The migration report records the input/output union and known-answer checks.",
    "limitations": "The references explain definitions and methods; any extra preset must be checked against the assumptions on this page. Added display totals and migration adapters are implementation behavior, not independently validated claims."
  },
  "contract": {
    "compute": "const mergedResult=(()=>{\nif((true&&(!Number.isFinite(torque)||torque<1||torque>5000))||(true&&(!Number.isFinite(rpm)||rpm<100||rpm>20000))||(true&&(!Number.isFinite(drivetrain)||drivetrain<0||drivetrain>40)))return{__error:'inputError'};\nif(![torque,rpm,drivetrain].every(Number.isFinite)||torque<=0||torque>5000||rpm<100||rpm>20000||drivetrain<0||drivetrain>40)return{__error:'inputError'};const horsepower=torque*rpm/5252,wheelHorsepower=horsepower*(1-drivetrain/100),validWeight=Number.isFinite(weight)&&weight>0;return{horsepower,wheelHorsepower,kilowatts:horsepower*0.7457,powerToWeight:validWeight?horsepower/weight:null,quarterMile:validWeight&&wheelHorsepower>0?5.825*Math.cbrt(weight/wheelHorsepower):null};\n})();return mergedResult.__error?{\"horsepower\":null,\"wheelHorsepower\":null,\"kilowatts\":null,\"powerToWeight\":null,\"quarterMile\":null,...mergedResult}:mergedResult;",
    "inputs": [
      {
        "name": "torque",
        "type": "number",
        "default": 300,
        "min": 1,
        "max": 5000,
        "step": 1,
        "slider": true,
        "requiredValue": true,
        "strictRange": true
      },
      {
        "name": "rpm",
        "type": "number",
        "default": 5000,
        "min": 100,
        "max": 20000,
        "step": 100,
        "slider": true,
        "requiredValue": true,
        "strictRange": true
      },
      {
        "name": "weight",
        "type": "number",
        "default": 3500,
        "min": 100,
        "max": 20000,
        "step": 50,
        "slider": true,
        "advanced": true,
        "requiredValue": false,
        "strictRange": true
      },
      {
        "name": "drivetrain",
        "type": "number",
        "default": 15,
        "min": 0,
        "max": 40,
        "step": 1,
        "slider": true,
        "advanced": true,
        "requiredValue": true,
        "strictRange": true
      }
    ],
    "outputs": [
      {
        "name": "horsepower",
        "precision": 1,
        "unit": "hp"
      },
      {
        "name": "wheelHorsepower",
        "precision": 1,
        "unit": "hp"
      },
      {
        "name": "kilowatts",
        "precision": 1,
        "unit": "kW"
      },
      {
        "name": "powerToWeight",
        "precision": 4,
        "unit": "hp/lb",
        "optional": true
      },
      {
        "name": "quarterMile",
        "precision": 2,
        "unit": "s",
        "optional": true
      }
    ],
    "interpret": null
  }
}
