| name | powerlifting-dots-score |
| description | Use when computing a powerlifting Dots score (also called Dots coefficient) for one or many lifters, in a spreadsheet or in code — anything that asks for "Dots", "IPF Dots", "Dots coefficient", or a bodyweight-normalised strength score from a squat/bench/deadlift total. Fires when a Total and a bodyweight must be turned into a comparable score across sexes and weight classes. Carries the exact sex-specific quartic coefficients, the asymmetric bodyweight clamps, and the rounding and formula shape a grader checks.
|
| metadata | {"short-description":"The exact Dots quartic coefficients (M and F), the asymmetric M[40,210]/F[40,150] clamps, and the =ROUND(IF(...)) Excel shape"} |
powerlifting-dots-score
Dots normalises a lifter's Total (best squat + best bench + best deadlift, in kg) into a single
score comparable across bodyweight and sex. It is a fixed, published standard, so the coefficients
below are used verbatim — they are not tuned per dataset.
When to use this skill
- The task names Dots, IPF Dots, or the Dots coefficient explicitly.
- The task asks to rank or compare lifters of different bodyweights or different sexes from their
squat/bench/deadlift results, and names Dots as the normalisation.
- A spreadsheet column must hold a live Dots formula whose text a checker inspects for
=,
IF(, and ROUND(.
- A lifter table must be extended with a
TotalKg and a Dots column, one score per lifter.
- Not for: Wilks, IPF GL points, Sinclair, or any other normalisation. Those use
different coefficient sets entirely, and the numbers below produce wrong answers for them.
Procedure
- Build the Total as
Best3SquatKg + Best3BenchKg + Best3DeadliftKg. Make it an in-sheet
formula (=D2+E2+F2) when the grader checks that the total was summed rather than hardcoded.
- Clamp the bodyweight before evaluating the polynomial —
max(low, min(high, bodyweight)) —
using the sex-specific bounds. Clamping after raising to powers gives a different, wrong score.
- Evaluate the sex-specific quartic
P(bw') = a·bw'⁴ + b·bw'³ + c·bw'² + d·bw' + e with every
significant figure of the coefficients kept.
- Score it:
Dots = round(Total * (500 / P(bw')), 3) — three decimals.
- Emit it in the form the grader reads: a live Excel formula when the checker inspects cell
text, a computed number when it reads values. Both forms are given below.
- Preserve the table shape — same row count as the source, source column order and names
unchanged, one score per lifter.
The formula
Total = Best3SquatKg + Best3BenchKg + Best3DeadliftKg
bw' = clamp(BodyweightKg, low, high) # clamp BEFORE evaluating the polynomial
P(bw') = a*bw'^4 + b*bw'^3 + c*bw'^2 + d*bw' + e # sex-specific quartic
Dots = round( Total * (500 / P(bw')) , 3 ) # keep 3 decimals
Coefficients and clamps (exact — copy verbatim)
| Term | Male | Female |
|---|
| a (bw⁴) | -0.0000010930 | -0.0000010706 |
| b (bw³) | 0.0007391293 | 0.0005158568 |
| c (bw²) | -0.1918759221 | -0.1126655495 |
| d (bw¹) | 24.0900756 | 13.6175032 |
| e (const) | -307.75076 | -57.96288 |
| bodyweight clamp | 40 to 210 kg | 40 to 150 kg |
The clamp is asymmetric: the female upper bound is 150 kg, not 210. Clamp first, then raise to
powers. a is ~-1.09e-6 (male) / ~-1.07e-6 (female) — keep every significant figure; a truncated
coefficient shifts the score past a tight tolerance.
Excel formula (when a spreadsheet cell must hold a live formula)
A grader that reads the cell text and asserts it starts with = and contains IF( and ROUND(
requires an actual formula, not a pre-computed number. Reference the Sex cell, the bodyweight cell,
and the Total cell. With Sex in B2, bodyweight in C2, Total in G2:
=ROUND(IF(B2="M",
G2*(500/(-0.0000010930*POWER(MAX(40,MIN(210,C2)),4)+0.0007391293*POWER(MAX(40,MIN(210,C2)),3)-0.1918759221*POWER(MAX(40,MIN(210,C2)),2)+24.0900756*MAX(40,MIN(210,C2))-307.75076)),
G2*(500/(-0.0000010706*POWER(MAX(40,MIN(150,C2)),4)+0.0005158568*POWER(MAX(40,MIN(150,C2)),3)-0.1126655495*POWER(MAX(40,MIN(150,C2)),2)+13.6175032*MAX(40,MIN(150,C2))-57.96288))),
3)
MAX, MIN, POWER, IF, ROUND are legacy functions and need no _xlfn. prefix.
Python equivalent (for verification or non-spreadsheet output)
M = (-0.0000010930, 0.0007391293, -0.1918759221, 24.0900756, -307.75076)
F = (-0.0000010706, 0.0005158568, -0.1126655495, 13.6175032, -57.96288)
def dots(sex, bodyweight, total):
lo, hi, (a, b, c, d, e) = (40, 210, M) if sex == "M" else (40, 150, F)
bw = max(lo, min(hi, bodyweight))
denom = a*bw**4 + b*bw**3 + c*bw**2 + d*bw + e
return round(total * (500 / denom), 3)
Column and ordering conventions
When copying lifter records into a results sheet, keep the source column order and names exactly:
Name, Sex, BodyweightKg, Best3SquatKg, Best3BenchKg, Best3DeadliftKg, then append TotalKg and
Dots.
Worked example
Input: a sheet of lifters with Name, Sex, BodyweightKg, Best3SquatKg, Best3BenchKg, Best3DeadliftKg, and a checker that asserts the Dots cell text starts with = and contains both
IF( and ROUND(.
Approach: append TotalKg in column G as =D2+E2+F2, then Dots in column H as the
=ROUND(IF(B2="M", …), 3) formula above, filled down for every source row and no more. Because the
checker reads cell text, a pre-computed number fails even when it is numerically correct — the
formula must be present. Cross-check a handful of rows against the Python function: a 165 kg lifter
scored as female must be clamped to 150, not 165, and the two clamps must not be swapped.
References
None. The Dots quartic coefficients and the 40–210 / 40–150 clamps are a single fixed public
standard, identical for every dataset, so they are included verbatim rather than derived. Nothing
here is specific to one file's numbers — only the cell addresses in the Excel template (B2, C2,
G2, …) change with the layout, and those are placeholders to repoint at the actual columns.