Determine your optimal training intensity using the Karvonen Formula.
Your Estimated Maximum Heart Rate
190 BPM
Heart Rate Reserve (HRR): 125 BPM
Intensity Zone
Percentage
Target BPM Range
How to Calculate Exercise Heart Rate Zones
Understanding your heart rate zones is essential for optimizing your cardiovascular fitness, whether you are training for a marathon or simply looking to improve your general health. While many people use the basic "220 minus age" formula, fitness professionals often prefer the Karvonen Formula, which accounts for your resting heart rate to provide a more personalized training range.
The Karvonen Formula Explained
The Karvonen formula calculates your Heart Rate Reserve (HRR) to determine your specific target zones. Here is the step-by-step math:
Exercise intensity is typically divided into five zones based on your maximum heart rate capacity:
Zone
Intensity
Benefit
Zone 1 (50-60%)
Very Light
Warm-up, recovery, and basic health maintenance.
Zone 2 (60-70%)
Light
Fat metabolism and basic endurance building (The "Aerobic" zone).
Zone 3 (70-80%)
Moderate
Improved aerobic capacity and cardiovascular efficiency.
Zone 4 (80-90%)
Hard
Increased anaerobic capacity and speed endurance.
Zone 5 (90-100%)
Maximum
Maximum performance, sprinting, and peak power development.
Realistic Calculation Example
Let's look at a 40-year-old individual with a resting heart rate of 70 BPM who wants to train in Zone 3 (Moderate Intensity, 70-80%).
Max HR: 220 – 40 = 180 BPM
Heart Rate Reserve: 180 – 70 = 110 BPM
Lower Bound (70%): (110 × 0.70) + 70 = 147 BPM
Upper Bound (80%): (110 × 0.80) + 70 = 158 BPM
This individual's target Zone 3 range is 147 to 158 beats per minute.
Tips for Accuracy
To get the most accurate results from this calculator, measure your resting heart rate first thing in the morning before getting out of bed. Place two fingers on your wrist or neck and count the beats for 60 seconds. Repeat this for three mornings and use the average for the "Resting Heart Rate" input field above.
function calculateHRZones() {
var age = document.getElementById("hr_age").value;
var resting = document.getElementById("hr_resting").value;
var resultDiv = document.getElementById("hr_results");
var zoneBody = document.getElementById("zone_body");
if (!age || age 120) {
alert("Please enter a valid age.");
return;
}
if (!resting || resting 200) {
alert("Please enter a valid resting heart rate.");
return;
}
var mhr = 220 – age;
var hrr = mhr – resting;
document.getElementById("hr_max_val").innerText = mhr + " BPM";
document.getElementById("hr_reserve_val").innerText = hrr;
var zones = [
{ name: "Zone 1 (Very Light)", min: 0.50, max: 0.60, color: "#e0e0e0" },
{ name: "Zone 2 (Light)", min: 0.60, max: 0.70, color: "#90caf9" },
{ name: "Zone 3 (Moderate)", min: 0.70, max: 0.80, color: "#81c784" },
{ name: "Zone 4 (Hard)", min: 0.80, max: 0.90, color: "#ffb74d" },
{ name: "Zone 5 (Maximum)", min: 0.90, max: 1.00, color: "#e57373" }
];
var html = "";
for (var i = 0; i < zones.length; i++) {
var low = Math.round((hrr * zones[i].min) + parseInt(resting));
var high = Math.round((hrr * zones[i].max) + parseInt(resting));
html += "