Normal distribution CDF calculator
If x equals the mean, such as 0 on the standard normal curve, the cumulative probability is 0.5: half the curve lies to its left. From x, mean and standard deviation you get Φ, the percentage and the upper tail. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- X
- 0
- Mean
- 0
- Std
- 1
- Z
- 0
- Cdf
- 0.5
- Percent
- 50
- Survival
- 0.5
The normal cumulative distribution function answers a question that appears in every statistics course and many production pipelines: given a value x drawn from a Gaussian with known mean and standard deviation, what fraction of the distribution lies at or below that value? The answer is written Φ(z) after the observation is standardized to a z-score, and it is the same number people look up in printed normal tables when they grade exams, size A/B experiments, or set process control limits. This calculator takes finite x, mean μ, and a strictly positive standard deviation σ, forms z equals x minus μ over σ, and returns the cumulative probability, the percentage form, and the complementary upper tail. Non-positive σ fails with a clear validation error because a zero or negative scale does not define a normal law.
How the normal CDF is computed from x, mean, and σ
Start with a raw observation x and a reference normal law N(μ, σ²). Subtract the mean from the observation and divide by the standard deviation to obtain the standardized score z equals (x minus μ) divided by σ. That single number places x on the unit scale where the mean is zero and the spread is one, which is exactly the scale used by every standard normal table.
The cumulative probability is then the area under the standard normal density from negative infinity up to z, written Φ(z) or P(Z ≤ z). Algebraically this equals one half times one plus the error function of z over the square root of two, because the Gaussian integral is the same special function that appears in diffusion and heat equations.
This capability evaluates that expression with a classical Abramowitz and Stegun rational approximation to the error function, accurate to roughly one part in ten million for ordinary floating-point inputs—more than enough for textbook drills, score reporting, and engineering thresholds. Extreme tails with absolute z at least eight are clamped to zero or one so underflow never leaves a value slightly outside the unit interval.
The special case of a non-positive standard deviation is rejected: when σ is zero or negative there is no proper normal density, and the cumulative probability is undefined rather than a number you could safely store or grade against.
What you enter and what you get back
A zero or negative standard deviation fails with a message that the normal CDF is undefined when σ is not greater than zero; those validation failures are not billed.
On success the body echoes the cleaned x, mean, and std, returns z as the standardized score, cdf as the cumulative probability in the closed unit interval, percent as cdf times one hundred for table-style display, survival as one minus cdf for the complementary upper tail P(X greater than x), and a formula string restating Φ(z) equals P(X ≤ x) with z equals (x − μ) divided by σ.
Classic checks include the standard normal at x equals zero, which yields cdf equals one half, and the two-sided critical value near one point nine six under mean zero and unit σ, which yields a cumulative probability near zero point nine seven five. Wire the free browser form for homework and quick sanity checks, then call the identical contract from scripts when you need bulk evaluation of cut scores or process limits.
Where a normal CDF calculator shows up in real work
Psychometrics and admissions offices map raw scores to cumulative ranks when forms share a published mean and sigma. Quality control and process monitoring convert sensor thresholds into cumulative probabilities against a process mean and sigma so engineering limits align with known tail mass instead of ad-hoc raw cutoffs. Product analytics and A/B tooling often need the one-sided or two-sided normal area for power sketches and critical-value checks before more heavyweight simulation.
Finance and risk teams express simple residual or return thresholds as cumulative probabilities under a normal working model for stress summaries. If you later need the inverse CDF (quantile or probit), a pure z-score without probability, t or chi-square CDFs, or full descriptive statistics for every CSV column, treat those as separate search intents and landings rather than overloading this normal distribution CDF calculator page.
What you can do with it
Convert exam scores to cumulative rank
Given a test mean and standard deviation, turn a raw score into the normal cumulative probability and percentage rank for reporting or grading.
Check critical values and tail mass
Evaluate Φ(1.96) or other z cutoffs under a chosen mean and σ when designing two-sided tests or simple A/B thresholds.
Map process limits to probability
Express a sensor or process threshold as P(X ≤ x) under a known process mean and positive sigma for control charts and quality reviews.
FAQ
What is the normal CDF formula?
Standardize with z = (x − μ) / σ, then Φ(z) = P(X ≤ x) = ½ (1 + erf(z / √2)). The result is the area under the normal curve from −∞ to x.
What happens if the standard deviation is zero or negative?
A normal distribution requires σ > 0; when the scale is not positive the cumulative probability is undefined.
How is this different from a z-score calculator?
A z-score only reports how many standard deviations x sits from the mean. This calculator goes one step further and returns the cumulative probability Φ(z) and related percent and survival values.
Can I use the standard normal (mean 0, σ = 1)?
Yes. Set mean to 0 and std to 1, then send any finite x.
What does it cost?
The browser tool is free and runs locally.
Related tools
For developers — API access
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.
API endpoint
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.
Call it from your stack
curl -X POST https://api.kit.forhosting.com/stat/normal-cdf \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"x":1.96,"mean":0,"std":1}'const res = await fetch("https://api.kit.forhosting.com/stat/normal-cdf", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"x": 1.96,
"mean": 0,
"std": 1
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/stat/normal-cdf",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"x": 1.96,
"mean": 0,
"std": 1
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/stat/normal-cdf", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"x":1.96,"mean":0,"std":1}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"x":1.96,"mean":0,"std":1}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/stat/normal-cdf", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"x": 1.96,
"mean": 0,
"std": 1
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "stat.normal_cdf",
"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.
Pricing
Published price — no tokens, no invented credits. A failed task is never charged.
Errors
| HTTP | Code | Meaning |
|---|---|---|
401 | unauthorized | Missing or invalid API key. |
402 | insufficient_balance | Your balance doesn't cover the task price. |
404 | unknown_type | That task type doesn't exist. |
429 | rate_limited | Too many requests. Use the webhook instead of polling. |
Technical notes
How the normal CDF is computed from x, mean, and σ
Every step is deterministic floating-point arithmetic with no random seeds, no wall-clock timestamps, and no network calls, so identical inputs always produce identical JSON.
Input contract, response shape, and error behaviour
POST a JSON body with three required finite numbers: x, the observation; mean, the center μ of the normal distribution; and std, the positive standard deviation σ. The field std also accepts the aliases sd, standard_deviation, and sigma so classroom wording and API naming both work without forcing callers to remember a single key. Missing fields, empty strings, non-numeric tokens, NaN, and Infinity fail with invalid_input naming the field. Pricing for successful API calls is the published base of $0.002 per item; validation failures do not consume prepaid balance.
Where a normal CDF calculator shows up in real work
Secondary-school and college statistics courses constantly assign empirical-rule questions, table look-ups for z equals one, two, or three, and conversion of exam scores into percentile ranks under an assumed normal curve; a single trusted oracle that returns cleaned JSON speeds grading and demo setup. Because this capability is a pure parse engine, API pricing is the published base of $0.002 per successful item and failed validation does not consume balance.