SnugGym

1RM Calculator and Rep Max Chart: Estimate Your Max Lifts

Last updated May 2025

Your one-rep max (1RM) is the maximum weight you can lift for a single repetition with proper form. You do not need to test it directly — which carries injury risk — to know it. This calculator estimates your 1RM, 5RM, and 10RM from any weight and rep combination you have actually performed, using three validated formulas.


How to Use This Calculator

  1. Enter a weight you have lifted recently.
  2. Enter the maximum number of clean reps you performed with that weight.
  3. Select which formula to use (or view all three for comparison).
  4. The calculator outputs your estimated 1RM, 5RM, 10RM, and a full percentage table for programming.

Important: These are estimates. The formulas assume you performed the reps to near-failure (could not complete 1–2 more reps with good form). Submaximal sets (5 easy reps with a weight you could do 10 times) will overestimate your 1RM.


The Calculator

Input Your Lift

InputValue
Weight Lifted
Reps Performed
Formula


Results


The Formulas Explained

Brzycki Formula (Most Conservative)

1RM = weight / (1.0278 - 0.0278 × reps)

Published by Matt Brzycki in 1998. Tends to produce the most conservative (lowest) 1RM estimates, especially at higher rep ranges (10+). Our analysis indicates this formula is most accurate for trained lifters performing sets above 5 reps.

Epley Formula (Most Common)

1RM = weight × (1 + reps / 30)

The simplest and most widely used formula. Popularized by Boyd Epley, founder of the National Strength and Conditioning Association (NSCA). Produces moderate estimates that align well with actual 1RM testing for most lifters in the 3–10 rep range.

Lombardi Formula (Most Aggressive)

1RM = weight × reps^0.10

Published by Bob Lombardi. Tends to produce the highest 1RM estimates, particularly at higher rep counts. May overestimate for some lifters but can be accurate for those with superior muscular endurance relative to absolute strength.

Formula Comparison at 135 lb × 8 reps

FormulaEstimated 1RMCharacter
Brzycki167 lbConservative; best for higher-rep sets
Epley171 lbBalanced; most widely used
Lombardi174 lbAggressive; best for low-rep sets

The variation between formulas at 8 reps is approximately ±4 lb — well within the practical margin for programming purposes.

Accuracy by Rep Range

Reps PerformedFormula AccuracyRecommendation
1–3 repsHigh (±2–3%)Use any formula; all are close
4–8 repsModerate-High (±3–5%)Epley or Brzycki preferred
9–15 repsModerate (±5–10%)Brzycki may be more accurate
16+ repsLower (±10–15%)All formulas less accurate; use as rough guide only

Key insight: The higher the rep count used for estimation, the less accurate all formulas become. A 1RM estimated from a 20-rep set is a rough approximation, not a precise number.


Training Percentage Table

Use this table to program your workouts based on your estimated 1RM:

% of 1RMRep RangeTraining Goal
95–100%1 repMaximal strength / peaking
90–94%2 repsStrength (near-maximal)
85–89%3 repsStrength
80–84%4–5 repsStrength-Hypertrophy
75–79%6–8 repsHypertrophy (general)
70–74%9–11 repsHypertrophy (muscular endurance)
65–69%12–15 repsMuscular endurance
60–64%16–20 repsEndurance / metabolic stress
50–59%20–30 repsLight recovery / technique work

Common Prescription Reference

GoalTypical LoadingSets x Reps
Pure strength85–95% of 1RM3–5 sets × 1–3 reps
Strength + size75–85% of 1RM3–4 sets × 4–8 reps
Muscle growth65–80% of 1RM3–5 sets × 6–12 reps
Endurance50–70% of 1RM2–4 sets × 12–20 reps

JavaScript Calculator Logic

// === REP MAX CALCULATOR ===

function calculateRepMax() {
  const weight = parseFloat(document.getElementById('rm-weight').value) || 0;
  const reps = parseInt(document.getElementById('rm-reps').value) || 0;
  const unit = document.getElementById('rm-unit').value;
  const formula = document.getElementById('rm-formula').value;

  if (weight <= 0 || reps <= 0 || reps > 30) {
    alert('Please enter valid weight (1–2000) and reps (1–30).');
    return;
  }

  // Calculate 1RM using selected formula(s)
  let results = {};

  if (formula === 'all' || formula === 'brzycki') {
    results.brzycki = weight / (1.0278 - 0.0278 * reps);
  }
  if (formula === 'all' || formula === 'epley') {
    results.epley = weight * (1 + reps / 30);
  }
  if (formula === 'all' || formula === 'lombardi') {
    results.lombardi = weight * Math.pow(reps, 0.10);
  }

  // Calculate derived RMs from each 1RM
  const rmTable = {};
  for (const [name, rm1] of Object.entries(results)) {
    rmTable[name] = {
      rm1: rm1,
      rm2: rm1 * (1.0278 - 0.0278 * 2),   // reverse Brzycki for 2RM
      rm3: rm1 * (1.0278 - 0.0278 * 3),
      rm5: rm1 * (1.0278 - 0.0278 * 5),
      rm8: rm1 * (1.0278 - 0.0278 * 8),
      rm10: rm1 * (1.0278 - 0.0278 * 10),
      rm12: rm1 * (1.0278 - 0.0278 * 12),
      rm15: rm1 * (1.0278 - 0.0278 * 15),
    };
  }

  // Render
  document.getElementById('rm-results').style.display = 'block';

  // Max results
  let maxHtml = '<table><thead><tr>';
  if (formula === 'all') {
    maxHtml += '<th>Rep Max</th><th>Brzycki</th><th>Epley</th><th>Lombardi</th></tr></thead><tbody>';
    const rows = [
      ['1RM', 'rm1'], ['2RM', 'rm2'], ['3RM', 'rm3'], ['5RM', 'rm5'],
      ['8RM', 'rm8'], ['10RM', 'rm10'], ['12RM', 'rm12'], ['15RM', 'rm15']
    ];
    for (const [label, key] of rows) {
      maxHtml += `<tr><td><strong>${label}</strong></td>`;
      for (const name of ['brzycki', 'epley', 'lombardi']) {
        if (rmTable[name]) {
          maxHtml += `<td>${rmTable[name][key].toFixed(1)} ${unit}</td>`;
        } else {
          maxHtml += `<td>—</td>`;
        }
      }
      maxHtml += '</tr>';
    }
  } else {
    maxHtml += '<th>Rep Max</th><th>Estimated Weight</th></tr></thead><tbody>';
    const data = rmTable[formula];
    const rows = [
      ['1RM (max single)', data.rm1], ['2RM', data.rm2], ['3RM', data.rm3],
      ['5RM', data.rm5], ['8RM', data.rm8], ['10RM', data.rm10],
      ['12RM', data.rm12], ['15RM', data.rm15]
    ];
    for (const [label, val] of rows) {
      maxHtml += `<tr><td><strong>${label}</strong></td><td>${val.toFixed(1)} ${unit}</td></tr>`;
    }
  }
  maxHtml += '</tbody></table>';
  document.getElementById('rm-max-results').innerHTML = maxHtml;

  // Percentage table
  const avg1RM = formula === 'all'
    ? (results.brzycki + results.epley + results.lombardi) / 3
    : results[formula];

  let pctHtml = '<table><thead><tr><th>% of 1RM</th><th>Weight</th><th>Typical Reps</th><th>Training Goal</th></tr></thead><tbody>';
  const percentages = [
    { pct: 100, reps: '1', goal: 'Maximal strength test' },
    { pct: 95, reps: '2', goal: 'Near-maximal strength' },
    { pct: 90, reps: '3', goal: 'Strength' },
    { pct: 85, reps: '4–5', goal: 'Strength-Hypertrophy' },
    { pct: 80, reps: '5–6', goal: 'Hypertrophy (heavy)' },
    { pct: 75, reps: '6–8', goal: 'Hypertrophy (general)' },
    { pct: 70, reps: '8–10', goal: 'Hypertrophy (light)' },
    { pct: 65, reps: '10–12', goal: 'Muscular endurance' },
    { pct: 60, reps: '12–15', goal: 'Endurance / metabolic' },
    { pct: 50, reps: '15–20', goal: 'Recovery / technique' },
  ];
  for (const row of percentages) {
    const w = avg1RM * (row.pct / 100);
    pctHtml += `<tr><td>${row.pct}%</td><td>${w.toFixed(1)} ${unit}</td><td>${row.reps}</td><td>${row.goal}</td></tr>`;
  }
  pctHtml += '</tbody></table>';
  document.getElementById('rm-percentage-table').innerHTML = pctHtml;

  // Usage guide
  document.getElementById('rm-usage-guide').innerHTML = `
    <p><strong>Programming your next workout:</strong> If your estimated 1RM is approximately ${avg1RM.toFixed(0)} ${unit}, 
    a hypertrophy-focused bench press session might use ${(avg1RM * 0.78).toFixed(0)} ${unit} 
    for 3 sets of 8 reps (approximately 78% of 1RM).</p>
    <p><strong>Progress tracking:</strong> Re-test every 6–8 weeks using the same weight and rep comparison. 
    If you previously lifted ${weight} ${unit} for ${reps} reps, and now you can lift that weight for more reps 
    or a heavier weight for the same reps, your max has increased.</p>
    <p><strong>Safety note:</strong> These formulas estimate performance. Do not attempt a true 1RM without 
    spotter arms, safety pins, or a trained spotter. For home gym users, the 3–5 rep range with 
    calculated percentages is safer and nearly as effective for strength development.</p>
  `;

  document.getElementById('rm-results').scrollIntoView({ behavior: 'smooth' });
}

// Auto-run on load with defaults
document.addEventListener('DOMContentLoaded', calculateRepMax);

Practical Programming Example

Your input: You bench press 135 lb for 8 reps to near-failure.

Epley estimate: 171 lb 1RM

A typical week using percentage-based programming:

DaySets x Reps% of 1RMWorking WeightFocus
Monday4 x 582%140 lbStrength-hypertrophy
Wednesday3 x 876%130 lbHypertrophy
Friday3 x 1072%123 lbVolume/hypertrophy

Progression: When 140 lb × 5 feels manageable (RPE 7 or lower), increase to 145 lb and continue.



As an Amazon Associate we earn from qualifying purchases. Last updated: May 2025.