ForHosting KIT · Education

Grade curve calculator

Bring a class to the mean you choose: if four raw marks average 65 and your target is 80, every mark is multiplied by 80 over 65, so the ranking stays the same. Square-root scaling instead gives low marks the biggest lift. Free in your browser.

  • Free
  • Runs in your browser
  • No sign-up
  • Your data stays on your device
Use it from WebAPIEmailTelegramApp soon
If you enter
Scores
50, 60, 70, 80
Target mean
80
You get
Quantity
4
Raw mean
65
Scale factor
1.2307692308
Curved mean
80

A grade curve is a published adjustment that takes every raw exam score in a section and lifts or compresses the set so the class mean matches a target the instructor chose. Teachers reach for a curve when an assessment was harder than intended, when two sections must share a comparable average, or when a department asks for a stated mean without rewriting items. This grade curve calculator accepts a list of non-negative raw scores, a target mean, and a method of linear or square-root scaling. Linear scaling multiplies every raw mark by the ratio of the target mean to the current mean, so relative order stays the same while the new average lands exactly on the target. Square-root scaling first takes the square root of each raw mark—which raises low scores more than high ones—then rescales the transformed values so the curved set still hits the same target average.

Linear scaling versus square-root scaling to a target mean

A classroom grade curve is not a letter on a bell and is not a one-score rescaling to a new maximum. It is a map from an entire roster of raw marks onto a new roster whose mean equals a number you publish in the syllabus or the department memo. Linear scaling is the transparent multiplier: compute the current raw mean, divide the target mean by that raw mean, and multiply every student score by that single scale factor.

Rank order is unchanged, ratios between students are unchanged, and the new class mean equals the target (up to ordinary floating-point rounding). Example: the four marks fifty, sixty, seventy, and eighty have mean sixty-five; a target mean of eighty applies the factor eighty over sixty-five, so each score rises in the same proportion and the curved mean is eighty. Square-root scaling is the concave alternative used when the exam was punishing at the bottom of the range.

First replace every raw mark x with the square root of x, which lifts a forty more, relatively, than it lifts a ninety. Example: the three marks thirty-six, sixty-four, and one hundred have square roots six, eight, and ten, whose mean is eight; a target of eighty uses a factor of ten and returns sixty, eighty, and one hundred. Both methods fail closed when a raw score is negative, because a signed penalty is not a grade that these two published maps are defined on.

Both methods also fail when every score is zero and the target is positive: there is no finite scale factor that turns a zero roster into a positive mean. When the roster is all zeros and the target is also zero, the calculator returns zeros with a scale factor of one. Choose linear when you want a fair proportional lift that a student can check with a calculator; choose square-root when you want extra relief at the low end while still promising a stated class average.

Where a grade-curve calculator earns its keep

Instructors and department chairs need one documented map from a posted roster plus a published target mean onto a list of adjusted scores so the gradebook, the parent portal, and the office-hours explanation never contradict each other. A linear curve is the conversation you can show on a whiteboard: every student is multiplied by the same factor, and anyone with a calculator can verify a neighbor’s new mark.

A square-root curve is the conversation you have after a brutal midterm: lower scores move more, the top of the range still cannot jump over a well-chosen target, and the class average is a number you stated in advance rather than a surprise after ad-hoc bonuses. LMS plugins and registrar scripts can call the same contract instead of each instructor keeping a private spreadsheet with a different formula.

This tool is not a substitute for assigning letters from a normal z-score (that is a different search and a different calculator) and it is not a converter that takes one score from an old maximum to a new maximum. Failed validation does not consume balance.

Raise a hard exam to a published class mean

Paste the section’s raw scores, set the target mean from the syllabus, and apply linear scaling so every student is multiplied by the same documented factor.

Square-root relief after a brutal midterm

Use square-root scaling when low scores need extra lift, then still land the class average on the target mean the department asked for.

Align two sections to the same average

Curve each roster independently to the same target mean so parallel sections report comparable class averages without rewriting the exam.

How does the linear grade curve work?

Rank order and ratios stay the same, and the new class mean equals the target.

What happens if a raw score is negative?

A negative raw score is not a grade these two maps are defined on, and the failure is not billed.

Is this the same as a bell-curve letter grade?

No. A bell-curve letter assigns A–F from one score, a class mean, and a standard deviation. This calculator returns an adjusted numeric score for every student on the roster.

When should I use square-root scaling instead of linear?

When the exam was harsh at the bottom of the range. Taking the square root first lifts low marks more than high ones, then the set is rescaled so the class mean still lands on your target.

Why can't I curve a class where every score is zero?

Because no multiplier turns a mean of zero into a positive target. With all marks at zero and a target above zero there is no finite scale factor, so the calculator stops instead of inventing a result.

Everything on this page is available programmatically. This section is for teams who want to wire it into their own systems; everyone else can just use the tool above.

POSThttps://api.kit.forhosting.com/edu/grade-curve

Prefer to automate it? One authenticated POST creates the task; the result comes back by webhook or a signed link. The same capability also runs here on the web, by email and from Telegram — and soon from our app too.

curl -X POST https://api.kit.forhosting.com/edu/grade-curve \
  -H "Authorization: Bearer $KIT_KEY" \
  -H "Content-Type: application/json" \
  -d '{"scores":[50,60,70,80],"target_mean":80}'
{
  "scores": [
    50,
    60,
    70,
    80
  ],
  "target_mean": 80
}
{
  "task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
  "type": "edu.grade_curve",
  "status": "queued",
  "_links": {
    "result": "/tasks/tsk_…/result"
  }
}

The API is asynchronous: the call returns a task_id immediately and the result arrives by webhook. Polling is capped at 1 req/s per task.

Per request$0.002

Published price — no tokens, no invented credits. A failed task is never charged.

max_n1000
max_abs1000000
HTTPCodeMeaning
401unauthorizedMissing or invalid API key.
402insufficient_balanceYour balance doesn't cover the task price.
404unknown_typeThat task type doesn't exist.
429rate_limitedToo many requests. Use the webhook instead of polling.

Negative raw scores are rejected as invalid_input rather than silently clipped. The same pure arithmetic powers the free browser tool and the API path: no network, no randomness, and no model tokens.

Linear scaling versus square-root scaling to a target mean

Then apply one more multiplier so the mean of the transformed values is stretched onto the target mean: curved_i equals the square root of raw_i times the target mean divided by the mean of all square roots.

Input contract, response fields, and validation

Each score and the target must be a finite decimal (optional sign and scientific notation are allowed). Optional fields are omitted rather than null. POST a JSON body with two required fields and one optional method. scores is the roster: a non-empty array of non-negative finite numbers, or a comma-separated or whitespace-separated string of the same numbers when a form posts plain text. Aliases are raw_scores, raw, marks, and grades. target_mean is the desired class average after the curve, a non-negative finite number on the same scale as the scores; aliases are target, desired_mean, curve_mean, and mean. method is linear or square_root and defaults to linear; aliases are curve, scaling, and mode. Booleans, objects, empty tokens, Infinity, and NaN fail with invalid_input so a bad cell never becomes a silent zero. A negative entry in scores fails with a message that raw scores cannot be negative, naming the index; a negative target_mean fails on that field. The engine enforces a hard maximum of one thousand roster marks and a per-value magnitude ceiling so memory and latency stay inside a predictable budget on the free browser path and on the Worker. Missing scores, an empty list, a list that exceeds the published length, or a missing target_mean fail with invalid_input and are not billed. On success the body returns method, count as the roster length, raw_mean, target_mean, the scale_factor that was applied after any square-root transform, curved_mean (which matches the target for every valid non-zero transform mean), the echoed raw_scores, the parallel curved_scores array in the same student order, a short formula string, and a one-line message for UI copy. Pair the curved list with your own letter table if you still assign A through F after the curve; this endpoint does not invent letter bands, drop the lowest score, or cap results at one hundred unless your target and roster already live on that scale.

Where a grade-curve calculator earns its keep

Keep payloads tiny, pin curved_scores together with raw_mean and scale_factor in tests, and you get reproducible class curves for gradebook plugins, section-to-section alignment, and published make-up policies without standing up a statistics stack of your own.

How does square-root scaling differ from linear scaling?

Square-root scaling first replaces each raw mark x with √x, which lifts low scores more than high ones, then multiplies by target_mean / mean(√raw) so the curved mean still equals the target.

What does the grade curve calculator cost?

The browser tool is free. API requests use prepaid KIT balance at $0.002 per successful call; invalid input is not billed.

Read the full KIT documentation →