# 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.

Version interactive : https://www.calcopenly.com/fr/statistics/grade-curve-calculator
Sujet : Calculatrices de statistiques et de probabilités

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.

## Données

- **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.

## Résultats

- Curved score — résultat principal
- z-score
- Percentile rank in the class
- Class mean
- Class standard deviation
- Curved mean
- Curved standard deviation
- Scores capped
- Students

## Formule

$$
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
$$

## Exemples détaillés

### 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**
- Source de vérification : 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**
- Source de vérification : 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**
- Source de vérification : 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**
- Source de vérification : 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.

### Quelle est la précision de « Grade curve calculator » ?

La précision dépend de vos données et des hypothèses de la méthode. Le calcul décimal utilise 50 chiffres significatifs, mais les estimations, méthodes numériques et données sources peuvent être moins précises ; l’arrondi affiché ne supprime pas ces limites. Exemples résolus vérifiés à partir de sources indépendantes : 4. Par exemple, « Default class, score 68 » est vérifié à l’aide de Python statistics.mean and pstdev (9.87863857); curved = 75 + 10·(68 − 71.75)/σ in decimal; PR = (7 + ½·1)/20 × 100.

### D’où vient cette méthode ?

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
