Max heart rate is the upper anchor for Zonas zones.
It is not a diagnosis. It is not a promise. It is the number the app uses to turn a percentage into a heart rate range.
The Source Priority
Zonas keeps the order simple:
| Priority | Source | Why |
|---|---|---|
| 1 | Custom max heart rate | You know your own tested number. |
| 2 | Date-of-birth estimate | The app can estimate from age. |
| 3 | Fallback default | Used only when date of birth is unavailable. |
In Auto mode, the app reads date of birth from Apple Health when permission is available. If it can calculate age, it estimates maximum heart rate with Tanaka.
In Custom mode, your value wins.
The Formula
The current Zonas formula is:
HRmax = 208 - trunc(0.7 x age)
The trunc part is not decoration. The iOS app uses Swift Int() conversion, which truncates toward zero.
Examples:
| Age | Zonas HRmax |
|---|---|
| 25 | 191 |
| 30 | 187 |
| 40 | 180 |
The age 25 case catches bad implementations. If you round 17.5 to 18, you get 190. Zonas gets 191.
Why Tanaka
Age-based max heart rate is always an estimate. The point is not to pretend otherwise.
Zonas uses Tanaka because it is a more defensible default than the older 220-minus-age rule. It gives the app a low-friction starting point when the user has not measured max heart rate.
That is all it should do.
When Custom Is Better
Use Custom if you have a better number:
- a lab-tested maximum heart rate
- a coach-prescribed max heart rate
- a field-test value you trust
- a conservative value recommended by a clinician
The app does not try to detect your true maximum from one workout spike. A single high reading can be real, but it can also be noise, strap movement, or a recording artifact.
How HRmax Changes Zones
If you use percent-HRmax zones, a higher max heart rate raises every zone boundary.
If you use Karvonen zones, max heart rate still matters, but it works together with resting heart rate:
heart rate reserve = HRmax - resting heart rate
target = resting heart rate + intensity x reserve
So max heart rate is one input. It is not the whole model.
The Practical Rule
If you do not know your true max, Auto is fine.
If you do know it, enter it.
The app is built to handle both without making the setup heavier than it needs to be.
Common questions
Does Zonas use 220 minus age?
No. The current app uses the Tanaka estimate: 208 minus trunc(0.7 times age). The truncation detail matches Swift Int math in the app.
Should I enter a custom max heart rate?
Yes, if you have a measured value from a lab test, a well-run field test, or a coach-prescribed number. A measured value should beat an age estimate.
Why does age 25 return 191 in Zonas?
Because the app truncates 0.7 times age before subtracting. For age 25, 0.7 x 25 is 17.5, Swift Int truncates that to 17, and 208 minus 17 is 191.
Sources
- Age-predicted maximal heart rate revisited
Tanaka et al. describe the 208 - 0.7 x age regression for estimating maximal heart rate in healthy adults.
- Target Heart Rates Chart
Public-facing target heart rate guidance commonly starts from an age-predicted maximum heart rate.
- View Heart Rate Zones on Apple Watch
Apple Watch supports heart rate zones based on personal health data and allows manual editing of zones.