Compare your observed Max Heart Rate against standard formulas
Male
Female
Enter the highest heart rate you have actually reached during max effort (e.g., a stress test or sprint).
Standard Formula (220 – Age)
— BPM
vs.
Your Observed Max
— BPM
Formula Comparison
Method
Formula
Estimated Max HR
Difference from You
Training Zone Impact
If your actual max is higher than calculated, your training zones need to be adjusted upwards. Using the standard formula would cause you to undertrain.
Zone
Intensity
Standard HR (Calculated)
Adjusted HR (Actual)
Zone 2 (Endurance)
60% – 70%
—
—
Zone 3 (Aerobic)
70% – 80%
—
—
Zone 4 (Threshold)
80% – 90%
—
—
Zone 5 (VO2 Max)
90% – 100%
—
—
Why Is My Max Heart Rate Higher Than Calculated?
It is a common scenario for athletes and fitness enthusiasts: you push hard during a sprint or a stress test, look at your heart rate monitor, and see a number significantly higher than what the "220 minus age" formula predicts. If you are 40 years old, the formula says your max should be 180 beats per minute (BPM), yet you might hit 195 BPM.
This calculator helps you quantify that difference and, more importantly, adjust your training zones accordingly.
The Limitation of Standard Formulas
The standard Fox formula (220 – Age) is widely used because it is simple, not because it is perfectly accurate for everyone. It represents an average population curve. However, the standard deviation for max heart rate is approximately 10–12 beats per minute. This means:
68% of the population is within 12 beats of the calculated average.
95% of the population is within 24 beats of the calculated average.
If your max heart rate is higher than calculated, you are likely part of the population that falls on the upper side of this bell curve. This is generally genetic and not necessarily an indicator of fitness level, though highly trained hearts can sometimes function differently under load.
Other Predictive Formulas
Since the Fox formula is crude, researchers have developed other methods to estimate MHR (Maximum Heart Rate). This calculator compares your actual data against these popular variations:
Tanaka Equation: 208 – (0.7 × Age). Often considered more accurate for healthy adults.
Gulati Formula: 206 – (0.88 × Age). Specifically derived for women, as female heart rates often decline more slowly with age than men's.
Haskell & Fox: The classic 220 – Age.
The Danger of "Undertraining"
If your actual max heart rate is significantly higher than the calculated formula, relying on the formula for training zones can be detrimental to your progress.
For example, if the formula says your Zone 4 (Threshold) starts at 160 BPM, but your true physiological threshold starts at 175 BPM, you might spend your tempo runs in what is actually your Zone 3 (Aerobic) range. You will feel like the workout is too easy, and you won't get the specific anaerobic adaptations you are aiming for.
When to See a Doctor
While having a genetically high max heart rate is common, sudden spikes in heart rate that exceed your known max, or high heart rates accompanied by dizziness, chest pain, or shortness of breath, should be evaluated by a cardiologist. This calculator assumes you are entering a valid heart rate observed during controlled exercise.
function calculateDifferences() {
var ageInput = document.getElementById('age');
var observedInput = document.getElementById('observedMhr');
var genderInput = document.getElementById('gender');
var age = parseFloat(ageInput.value);
var observedMhr = parseFloat(observedInput.value);
var gender = genderInput.value;
// Validation
if (isNaN(age) || age 100) {
alert("Please enter a valid age between 10 and 100.");
return;
}
if (isNaN(observedMhr) || observedMhr 250) {
alert("Please enter a valid observed max heart rate (usually between 100 and 250 BPM).");
return;
}
// 1. Calculate Standard Formulas
var fox = 220 – age; // Classic
var tanaka = 208 – (0.7 * age); // Tanaka
var hunt = 211 – (0.64 * age); // Nes et al / Hunt
var genderSpecific;
var genderFormulaName;
if (gender === 'female') {
genderSpecific = 206 – (0.88 * age); // Gulati
genderFormulaName = "Gulati (Women)";
} else {
genderSpecific = 208 – (0.7 * age); // Tanaka serves as general better fit, or use Astrand
// For male specific widely cited usually falls back to Tanaka or 220-age
// We will use 214 – (0.8 * age) for men (Sheffield) for variety or keep Tanaka
genderSpecific = 214 – (0.8 * age); // Sheffield
genderFormulaName = "Sheffield (Men)";
}
// Rounding
fox = Math.round(fox);
tanaka = Math.round(tanaka);
hunt = Math.round(hunt);
genderSpecific = Math.round(genderSpecific);
// 2. Calculate Differences
var diffFox = observedMhr – fox;
// 3. Display Main Results
document.getElementById('results-area').style.display = 'block';
document.getElementById('fox-result').innerHTML = fox + " BPM";
document.getElementById('observed-result').innerHTML = observedMhr + " BPM";
// Alert Box Logic
var alertBox = document.getElementById('discrepancy-alert');
if (diffFox > 0) {
alertBox.innerHTML = "Result: Your actual Max Heart Rate is " + diffFox + " BPM higher than the standard formula predicts. Your training zones should be adjusted upwards.";
alertBox.style.backgroundColor = "#d4edda";
alertBox.style.color = "#155724";
alertBox.style.borderColor = "#c3e6cb";
} else if (diffFox < 0) {
alertBox.innerHTML = "Result: Your actual Max Heart Rate is " + Math.abs(diffFox) + " BPM lower than the standard formula predicts. Adjust training zones downwards to avoid overtraining.";
alertBox.style.backgroundColor = "#f8d7da";
alertBox.style.color = "#721c24";
alertBox.style.borderColor = "#f5c6cb";
} else {
alertBox.innerHTML = "Result: Your actual Max Heart Rate matches the standard formula exactly.";
}
// 4. Populate Formula Table
var tableBody = document.getElementById('formula-table-body');
var formulas = [
{ name: "Standard (Fox)", val: fox },
{ name: "Tanaka (2001)", val: tanaka },
{ name: "Nes et al (Hunt)", val: hunt },
{ name: genderFormulaName, val: genderSpecific }
];
var htmlRows = "";
for (var i = 0; i 0 ? "+" + diff + " BPM" : diff + " BPM";
if (diff === 0) diffString = "Match";
htmlRows += "