R.PLNORM Function (Gnumeric)
Use Gnumeric R.PLNORM for lognormal probabilities. Verify lower, upper and log tails and handle the documented nonpositive-cutoff upper-tail defect explicitly.
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
Nonpositive-cutoff defect: in Gnumeric 1.12.57, R.PLNORM(0,0,1,FALSE()) returned 0, although the lognormal upper-tail probability is 1. Negative cutoffs and an empty cutoff showed the same issue. The inspected 1.12.62 helper still returns zero on this branch regardless of the tail flag.
Quick answer: =R.PLNORM(1,0,1) gives 0.5 in Gnumeric 1.12.57.
Availability and version history
- Introduced: First release not established; named in Gnumeric 1.12.10 release notes.
- 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.PLNORM returns
For positive x, R.PLNORM returns P(X≤x) by default, or P(X>x) with lower_tail=FALSE. LN(X) has normal mean logmean and standard deviation logsd. Optional log_p requests the natural logarithm of the selected probability. Versioned function help.
Syntax and arguments
=R.PLNORM(x,logmean,logsd[,lower_tail[,log_p]])
x, logmean and logsd are required; logsd must be positive. lower_tail defaults to TRUE and log_p to FALSE. Logmean and logsd describe LN(X), not X itself. The nonpositive-x shortcut has the tail defect stated above.
Brackets mark optional arguments; do not type them. Current worksheet implementation.
Reproducible examples
These self-contained formulas were recalculated natively. Ordinary-domain results were checked against independent mathematics; source guards explain the boundary cases. 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.PLNORM(1,0,1) |
0.5 |
=R.PLNORM(2,0,1) |
0.755891404214 |
=R.PLNORM(EXP(1),1,.5) |
0.5 |
=R.PLNORM(2,0,1,FALSE()) |
0.244108595786 |
=R.PLNORM(2,0,1,TRUE(),TRUE()) |
-0.27985755834 |
=R.PLNORM(2,0,1,FALSE(),TRUE()) |
-1.410142088006 |
=R.PLNORM(.5,0,1) |
0.244108595786 |
=R.PLNORM(4,1,.5) |
0.780117089512 |
Practical worksheet
With logmean=0 and logsd=1, P(X≤2) is approximately 0.755891404214, and P(X>2) is approximately 0.244108595786. At x=1 the lower probability is 0.5, identifying the median.
For an interval from 0.5 to 2, subtract the two positive-cutoff CDF values: =R.PLNORM(2,0,1)-R.PLNORM(.5,0,1). The independent probability is approximately 0.511782808429. Both endpoints are positive, so this example avoids the defective branch.
Advanced interpretation and checks
For validated numeric x and positive logsd, an ordinary upper-tail worksheet can handle the support boundary explicitly: with x in A2, use =IF(A2<=0,1,R.PLNORM(A2,0,1,FALSE())). The executed zero-cutoff form below returned 1. This recipe assumes the input and parameters were already validated; it should not conceal bad text or an invalid spread.
For a log upper tail at x≤0, the mathematical answer is LN(1)=0. For positive x, request the upper log-tail directly rather than subtracting a rounded lower CDF from one.
The saved advanced-check result for =IF(0<=0,1,R.PLNORM(0,0,1,FALSE())) was 1.
Boundaries and troubleshooting
The source returns R_D__0 at x≤0 instead of choosing the requested tail. In ordinary mode that is zero; in log mode it is negative infinity, displayed as #NUM!. Thus a nonpositive-cutoff upper log tail is also wrong, while the lower-tail zero/log-zero outcomes match the support boundary.
Nonpositive logsd gives #NUM!. Nonnumeric text gives #VALUE!; empty F5 becomes zero and enters the defective shortcut. Wrong arity gives #N/A. The explicit support-boundary alternative above was checked only in the stated 1.12.57 case; no later-version execution is claimed.
F5 is genuinely empty, rather than a cell containing an empty string.
| Formula | Gnumeric 1.12.57 result |
|---|---|
=R.PLNORM(0,0,1) |
0 |
=R.PLNORM(-1,0,1) |
0 |
=R.PLNORM(0,0,1,FALSE()) |
0 |
=R.PLNORM(-1,0,1,FALSE()) |
0 |
=R.PLNORM(0,0,1,FALSE(),TRUE()) |
#NUM! |
=R.PLNORM(0,0,1,TRUE(),TRUE()) |
#NUM! |
=R.PLNORM(1,0,0) |
#NUM! |
=R.PLNORM(1,0,-1) |
#NUM! |
=R.PLNORM("abc",0,1) |
#VALUE! |
=R.PLNORM(F5,0,1,FALSE()) |
0 |
=R.PLNORM(1,0) |
#N/A |
=R.PLNORM(1,0,1,0,0,1) |
#N/A |
Official evidence and checking scope
- Current worksheet callback
- Tested-version worksheet callback
- Current plnorm calculation
- Tested-version plnorm calculation
- Nonfinite worksheet-value handling
- Statistical Functions From R plugin declaration
The relevant complete worksheet callback and main calculation helper are unchanged between the inspected versions. That does not establish later-version numerical execution. Both stale and uncached SUM controls recalculated correctly. Native XML preserves the R.* identities. The secondary ODF export keeps these calls in the ORG.GNUMERIC namespace; it does not establish execution in another product. GUI entry, other locales and other spreadsheet products were not tested.
Related guides
R.PNORM, LOGNORMDIST, LN.