{
  "id": "vdot",
  "version": "300f590b1833",
  "status": "published",
  "name": "VDOT Calculator",
  "question": "What is my VDOT?",
  "summary": "Computes a runner’s VDOT from one race distance and time with the Daniels and Gilbert equations, with equal-effort times for 1,500 m to the marathon and the pace at VO2max.",
  "category": "sports",
  "subcategory": "running",
  "url": "https://www.acalculator.org/sports/vdot-calculator",
  "markdown": "https://www.acalculator.org/sports/vdot-calculator.md",
  "kind": "function",
  "method": "v = distance ÷ time (m/min); VO2 = −4.60 + 0.182258 v + 0.000104 v²; %max = 0.8 + 0.1894393 e^(−0.012778 t) + 0.2989558 e^(−0.1932605 t), t in minutes; VDOT = VO2 ÷ %max.",
  "assumptions": [
    "The race was run at full effort on a flat course in good conditions.",
    "Equal-VDOT times assume the runner is as well trained for the other distance.",
    "VDOT is a performance score, not a measured VO2max from a lab test."
  ],
  "inputs": {
    "$schema": "https://json-schema.org/draft/2020-12/schema",
    "type": "object",
    "properties": {
      "d": {
        "title": "Race distance",
        "description": "The distance of a recent race run at full effort. A marathon is 42.195 km.",
        "type": [
          "number",
          "string"
        ],
        "x-quantity": "length",
        "minimum": 800,
        "maximum": 50000
      },
      "t": {
        "title": "Race time",
        "description": "The finishing time of that race.",
        "type": [
          "number",
          "string"
        ],
        "x-quantity": "time",
        "minimum": 120,
        "maximum": 36000
      }
    }
  },
  "outputs": {
    "vdot": {
      "label": "VDOT",
      "description": "Oxygen cost of the race speed ÷ the share of VO2max held for the race time.",
      "format": "number"
    },
    "vo2": {
      "label": "Oxygen cost of the race pace",
      "description": "VO2 at the race speed, in mL of oxygen per kg per minute.",
      "format": "number"
    },
    "share": {
      "label": "Share of VO2max held",
      "description": "The share of VO2max a runner can hold for the race time, by the Daniels and Gilbert formula.",
      "format": "percent"
    },
    "r1500": {
      "label": "1,500 m time",
      "description": "The 1,500 m time at the same VDOT, to the second.",
      "format": "text"
    },
    "rMile": {
      "label": "1 mile time",
      "description": "The 1 mile time at the same VDOT, to the second.",
      "format": "text"
    },
    "r5k": {
      "label": "5 km time",
      "description": "The 5 km time at the same VDOT, to the second.",
      "format": "text"
    },
    "r10k": {
      "label": "10 km time",
      "description": "The 10 km time at the same VDOT, to the second.",
      "format": "text"
    },
    "rHalf": {
      "label": "Half marathon time",
      "description": "The half marathon time at the same VDOT, to the second.",
      "format": "text"
    },
    "rMarathon": {
      "label": "Marathon time",
      "description": "The marathon time at the same VDOT, to the second.",
      "format": "text"
    },
    "paceKm": {
      "label": "Pace at VO2max, per km",
      "description": "The speed whose oxygen cost equals the VDOT, as time per kilometre.",
      "format": "text"
    },
    "paceMile": {
      "label": "Pace at VO2max, per mile",
      "description": "The same speed as time per mile.",
      "format": "text"
    }
  },
  "defaultAnswer": {
    "inputs": {
      "d": 5000,
      "t": 1200
    },
    "outputs": {
      "vdot": 49.806233428066335,
      "vo2": 47.4645,
      "share": 95.2983125466646,
      "r1500": "5:25",
      "rMile": "5:51",
      "r5k": "20:00",
      "r10k": "41:28",
      "rHalf": "1:31:50",
      "rMarathon": "3:11:17",
      "paceKm": "3:51",
      "paceMile": "6:11"
    },
    "text": "3.107 mi in 20 min is a VDOT of 49.8."
  },
  "examples": [
    {
      "given": {
        "d": 5000,
        "t": 1200
      },
      "expect": {
        "vdot": 49.806233428066335,
        "vo2": 47.4645,
        "r10k": "41:28",
        "rHalf": "1:31:50",
        "rMarathon": "3:11:17",
        "paceKm": "3:51",
        "paceMile": "6:11"
      },
      "source": "Daniels J, Gilbert J. Oxygen Power: Performance Tables for Distance Runners, 1979 (equations as given in Daniels’ Running Formula); equations written out at https://dev.to/keepknow/how-race-time-predictors-actually-work-daniels-vdot-vs-riegel-with-the-javascript-55k1 (retrieved 2026-10-01); Python 3 cross-check",
      "tolerance": 1e-12
    },
    {
      "given": {
        "d": 42195,
        "t": 12600
      },
      "expect": {
        "vdot": 44.55353056213261,
        "r5k": "22:00",
        "r10k": "45:37"
      },
      "source": "Daniels and Gilbert 1979, Oxygen Power (VO2 and %VO2max equations); hand calculation in content.mdx; Python 3 cross-check",
      "tolerance": 1e-12
    },
    {
      "given": {
        "d": 5000,
        "t": 1196
      },
      "expect": {
        "vdot": 50
      },
      "source": "Daniels and Gilbert 1979, Oxygen Power; VDOT tables in Daniels’ Running Formula (5 km 19:57 at VDOT 50), within the table’s rounding to the second",
      "tolerance": 0.002
    }
  ],
  "sources": [
    "Daniels J, Gilbert J. Oxygen Power: Performance Tables for Distance Runners. Tempe, AZ, 1979; the equations and VDOT tables are used in Daniels J. Daniels’ Running Formula, 4th edition, Human Kinetics, 2021, retrieved 2026-10-01. https://us.humankinetics.com/products/daniels-running-formula-4th-edition",
    "The VO2 and %VO2max equations written out with their constants: How race time predictors actually work, Daniels VDOT vs Riegel, DEV Community, retrieved 2026-10-01. https://dev.to/keepknow/how-race-time-predictors-actually-work-daniels-vdot-vs-riegel-with-the-javascript-55k1"
  ],
  "related": [
    "pace",
    "vo2-max"
  ],
  "changelog": []
}
