R.PNORM Function (Gnumeric)
Find normal lower and upper tails with Gnumeric R.PNORM. Use direct tail flags, log probabilities and native examples without subtractive cancellation.
Verification status: 21 reference, boundary and advanced-check formulas were recalculated with Gnumeric 1.12.57 ssconvert. Saved identities, the blank input and numerical results were independently checked. Gnumeric 1.12.62 was source-checked only. How formula examples are checked
Quick answer: =R.PNORM(0,0,1) gives 0.5 in Gnumeric 1.12.57.
Availability and version history
- Introduced: First release not established; present in the retained 1.12.57 source.
- Supported in: Gnumeric 1.12.62; no retirement is established.
- Scope: Desktop Gnumeric with its Statistical Functions From R plugin. English comma-separated formulas are shown.
- Checked: October 14, 2026. Tables and the named advanced check use 1.12.57 ssconvert. Current 1.12.62 source was inspected; that release was not executed.
What R.PNORM returns
R.PNORM returns a normal cumulative probability. By default it calculates P(X≤x); lower_tail=FALSE requests the upper tail. log_p=TRUE returns the natural logarithm of the selected probability. The order of these two optional flags matters. Versioned function help.
Syntax and arguments
=R.PNORM(x,mean,standard_deviation[,lower_tail[,log_p]])
x,mean,standard_deviation: required numeric inputs. Use positive spread for an ordinary normal distribution.lower_tail: optional, TRUE by default. FALSE selects the upper tail.log_p: optional, FALSE by default. TRUE returns the natural logarithm; supply lower_tail before it.
Brackets mark optional arguments; do not type them. Current worksheet implementation.
Reproducible examples
These self-contained formulas were recalculated natively and checked against independent mathematics. Results are rounded to twelve decimal places, or thirteen significant digits for small nonzero values. This is presentation precision, not a universal accuracy guarantee.
| Formula | Gnumeric 1.12.57 result |
|---|---|
=R.PNORM(0,0,1) |
0.5 |
=R.PNORM(1,0,1) |
0.841344746069 |
=R.PNORM(-1,0,1) |
0.158655253931 |
=R.PNORM(1,0,1,FALSE()) |
0.158655253931 |
=R.PNORM(0,0,1,TRUE(),TRUE()) |
-0.69314718056 |
=R.PNORM(1,0,1,FALSE(),TRUE()) |
-1.841021645009 |
=R.PNORM(12,10,2) |
0.841344746069 |
=R.PNORM(8,0,1,FALSE()) |
6.220960574272E-16 |
Practical worksheet
For a standard normal variable, =R.PNORM(1,0,1) is approximately 0.841344746069. The corresponding upper tail =R.PNORM(1,0,1,FALSE()) is approximately 0.158655253931. The executed sum of these two calls is 1.
For mean 10 and standard deviation 2, the value 12 is one standard deviation above the mean, so it has the same lower-tail probability. A central interval can be obtained by subtracting lower-tail probabilities at its two bounds; it is not the density at the midpoint.
Advanced interpretation and checks
The standardization is z=(x−mean)/sigma. The lower tail is Φ(z) and upper tail is Φ(−z). For a small upper probability, request FALSE directly rather than calculating 1 minus a lower-tail result already rounded close to 1.
At z=8, the native upper probability is approximately 6.220960574272E−16. At z=40, the ordinary upper output is zero through underflow, but the log upper output is approximately −804.608442013754. That log is a finite representation of a positive mathematical tail, not a zero-probability event.
The saved advanced-check result for =R.PNORM(1,0,1)+R.PNORM(1,0,1,FALSE()) was 1.
Boundaries and troubleshooting
A negative spread gives #NUM!. At zero spread the tested lower-tail branch behaves as a point mass: x below mean gives 0 and x at or above mean gives 1. State that degenerate model explicitly rather than treating zero as a usual standard deviation. Non-numeric arguments give #VALUE!; missing required arguments or too many arguments give #N/A.
F5 is genuinely empty, rather than a cell containing an empty string. #NUM! can represent an unrepresentable infinite mathematical endpoint as well as an invalid numeric domain; the distinctions above matter.
| Formula | Gnumeric 1.12.57 result |
|---|---|
=R.PNORM(-1,0,0) |
0 |
=R.PNORM(0,0,0) |
1 |
=R.PNORM(1,0,0) |
1 |
=R.PNORM(0,0,-1) |
#NUM! |
=R.PNORM("abc",0,1) |
#VALUE! |
=R.PNORM(F5,0,1) |
0.5 |
=R.PNORM(1,0,1,2) |
0.841344746069 |
=R.PNORM(1,0,1,FALSE(),2) |
-1.841021645009 |
=R.PNORM(1,0) |
#N/A |
=R.PNORM(1,0,1,1,0,1) |
#N/A |
=R.PNORM(40,0,1,FALSE()) |
0 |
=R.PNORM(40,0,1,FALSE(),TRUE()) |
-804.608442013754 |
Official evidence and checking scope
- Current worksheet callback
- Tested-version worksheet callback
- Current pnorm calculation
- Nonfinite worksheet-value handling
- Statistical Functions From R plugin declaration
The relevant worksheet callback is unchanged between the inspected versions. That does not establish later-version numerical execution. Both stale and uncached SUM controls recalculated correctly. Native XML identities were checked; secondary ODF exports retain these functions with the ORG.GNUMERIC namespace. GUI entry, other locales and other spreadsheet products were not tested.