# calculating v02 max

last updated: Oct 20, 2023
VO2max% â€‹= 0.8 + 0.1894393*e^(âˆ’0.012778*t) +Â 0.2989558*e^(âˆ’0.1932605*t)â€‹

VO2 = âˆ’4.60 + 0.182258 * v + 0.000104 * v^2

VO2max=VO2/VO2maxÂ %

whereÂ tÂ is the race time inÂ _minutes_, andÂ vÂ is race velocity inÂ _meters / minute_.


OpenWorkoutTracker has this C++ function I found via github search:

double VO2MaxCalculator::EstimateVO2MaxFromRaceDistanceInMeters(double raceDistanceMeters, double raceTimeMinutes)
{
double speed = raceDistanceMeters / raceTimeMinutes;
return -4.60 + 0.182258 * speed + 0.000104 * speed * speed;
}



so if you run a 40 minute 10k, that would give:

> speed = 10000 / 40
< 250
> -4.6 + 0.182258 * speed + 0.000104 * speed * speed;
< 47.4645



but that's significantly lower than what daniels uses; if we try the calculation given first, we get:

> 0.8 + 0.1894393 * Math.pow(Math.E, -0.012778 * 40)
>     +Â 0.2989558 * Math.pow(Math.E, -0.1932605 * 40)
< 0.9137614442697204



and so:

> 47.4645 / 0.9137614442697204
< 51.9440826680247



which matches Daniels very closely

â†‘ up