# Grade curve calculator

> Grade curve calculator: rescale a class's scores to a target mean and standard deviation, or add flat points, with z-scores and percentile ranks.

Interactive version: https://www.calcopenly.com/statistics/grade-curve-calculator
Subject: Statistics and probability calculators

A z-score curve rescales every score linearly. Each student's z-score, z = (x − class mean)/SD, is kept and mapped onto the target: curved = target mean + target SD × z. A flat curve instead adds the same number of points to everyone so that the class mean reaches the target. Both keep the order of students, so percentile ranks do not change; only scores pushed above the highest possible score are cut back to it.

The default class of 20 has a mean of 71.75 and a population SD of 9.88. Curving it to a mean of 75 and an SD of 10 turns a 68 (z = −0.38) into 71.20, and its percentile rank stays 37.5.

A z-score curve does not make scores normally distributed: a skewed class stays skewed. When scores are capped, the curved mean falls below the target, and a warning shows the actual value.

## Inputs

- **Class scores**
- **Curve by** (options: Target mean and SD, Add points)
- **Target mean**
- **Target standard deviation**
- **Standard deviation of the class** (options: Population (divide by n), Sample (divide by n − 1))
- **Highest possible score**: Curved scores above this are capped. Leave blank for no cap.
- **Your score**: Leave blank to see the median student.

## Results

- Curved score — main result
- z-score
- Percentile rank in the class
- Class mean
- Class standard deviation
- Curved mean
- Curved standard deviation
- Scores capped
- Students

## Formula

$$
z = \frac{x - \bar x}{s},\qquad x_{\text{curved}} = \mu_{\text{target}} + \sigma_{\text{target}}\,z,\qquad PR = \frac{B + \tfrac12 E}{n}\times 100
$$

## Worked examples

### Default class, score 68

- Class scores: 52, 58, 61, 63, 64, 66, 67, 68, 70, 71, 72, 72, 74, 75, 77, 79, 81, 84, 88, 93
- Curve by: Target mean and SD
- Target mean: 75
- Target standard deviation: 10
- Highest possible score: 100
- Your score: 68
- **Class mean: 71.75**
- **Class standard deviation: 9.878639**
- **z-score: -0.3796**
- **Curved score: 71.20**
- **Percentile rank in the class: 37.5**
- **Curved mean: 75**
- **Curved standard deviation: 10**
- **Scores capped: 0**
- Checked against: Python statistics.mean and pstdev (9.87863857); curved = 75 + 10·(68 − 71.75)/σ in decimal; PR = (7 + ½·1)/20 × 100

### Add points to reach 70

- Class scores: 55, 60, 65, 70, 75
- Curve by: Add points
- Target mean: 70
- Highest possible score: 100
- Your score: 60
- **Curved score: 65.00**
- **Percentile rank in the class: 30**
- **Curved mean: 70**
- **Curved standard deviation: 7.071068**
- Checked against: Hand computation: mean 65, so +5 points; PR of 60 = (1 + ½·1)/5 × 100; population SD √50 is unchanged by a shift

### Cap at 100 pulls the mean below target

- Class scores: 40, 55, 60, 70, 95
- Curve by: Target mean and SD
- Target mean: 80
- Target standard deviation: 15
- Highest possible score: 100
- Your score: 95
- **Curved score: 100.00**
- **Scores capped: 1**
- **Curved mean: 78.911266**
- **Percentile rank in the class: 90**
- Checked against: Python decimal: σ = 18.2757 (statistics.pstdev); 95 → 80 + 15 × 1.69624 = 105.44, capped to 100; mean of the capped curved list

### Sample SD, blank score uses the median

- Class scores: 58, 70, 74, 81, 92
- Curve by: Target mean and SD
- Target mean: 75
- Target standard deviation: 10
- Standard deviation of the class: Sample (divide by n − 1)
- Highest possible score: 100
- **Class standard deviation: 12.649111**
- **z-score: -0.0791**
- **Curved score: 74.21**
- **Percentile rank in the class: 50**
- Checked against: Python statistics.stdev = 12.6491106 (√160); median 74 → 75 + 10·(74 − 75)/√160

## Questions

### How do you curve grades on a bell curve?

Find the class mean and standard deviation, turn each score into a z-score, then map it onto the target: curved = target mean + target SD × z. In the default class (mean 71.75, SD 9.88) with a target of 75 and 10, a score of 68 has z = −0.38 and becomes 75 + 10 × (−0.38) = 71.20. Every student keeps the same rank.

### What is the difference between a flat curve and a bell curve?

A flat curve adds the same points to every score, so the spread stays as it was: raising a class mean from 65 to 70 adds 5 points to everyone. A z-score curve also sets the spread. With the defaults the SD goes from 9.88 to 10, so 52 rises to 55.01 and 93 to 96.51. If the target SD is well above the class SD, low scores can even fall.

### What is a percentile rank?

The percentage of the class scoring below a score, with ties counted as half: PR = (B + ½E)/n × 100, the definition used in classical test theory (Crocker & Algina, 1986). In the default class of 20, 7 scores are below 68 and 1 equals it, so PR = (7 + 0.5)/20 × 100 = 37.5. A linear curve never changes percentile ranks, because it keeps the order of the scores.

### Should I use the population or sample standard deviation to curve grades?

Use the population SD (divide by n) when the class is the whole group being graded, which is the default. The sample SD (divide by n − 1) estimates the spread of a larger group the class was drawn from. For 20 students the two differ by a factor of √(20/19) = 1.026; switching to the sample SD moves the default 68 from 71.20 to 71.30 and the top score of 93 from 96.51 to 95.97.

### How accurate is the grade curve calculator?

Accuracy depends on your inputs and the method's assumptions. Decimal arithmetic uses 50 significant digits, but estimates, numerical methods and source data can be less precise; the displayed rounding does not remove those limits. It is checked against 4 worked examples whose answers come from independent sources; for example, “Default class, score 68” is checked against Python statistics.mean and pstdev (9.87863857); curved = 75 + 10·(68 − 71.75)/σ in decimal; PR = (7 + ½·1)/20 × 100.

### Where does the method come from?

NIST/SEMATECH e-Handbook of Statistical Methods, §1.3.5.1 (mean) and §1.3.5.6 (standard deviation); Crocker & Algina, Introduction to Classical and Modern Test Theory (1986), ch. 19: percentile ranks and linear standard scores.

## Sources

- [NIST/SEMATECH e-Handbook of Statistical Methods, §1.3.5.1 (mean) and §1.3.5.6 (standard deviation)](https://www.itl.nist.gov/div898/handbook/eda/section3/eda356.htm)
- Crocker & Algina, Introduction to Classical and Modern Test Theory (1986), ch. 19: percentile ranks and linear standard scores
