R.QLNORM Function (Gnumeric)
Find lognormal cutoffs with Gnumeric R.QLNORM. Check tail and log-probability inputs, normal-scale parameters, endpoint behavior and zero-spread differences.
Verification status: 24 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.QLNORM(.5,0,1) gives 1 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.QLNORM returns
R.QLNORM returns a lognormal quantile. For a lower-tail probability p strictly between 0 and 1, it is EXP(logmean+logsd×standardNormalQuantile(p)). Upper-tail mode interprets the input as P(X>x); log_p means that the input is already a natural log probability. Versioned function help.
Syntax and arguments
=R.QLNORM(probability,logmean,logsd[,lower_tail[,log_p]])
Probability, logmean and logsd are required. Optional lower_tail defaults to TRUE and log_p to FALSE. Use positive logsd for an ordinary continuous distribution. This quantile implementation also accepts zero logsd for interior probabilities, unlike R.DLNORM and R.PLNORM.
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.QLNORM(.5,0,1) |
1 |
=R.QLNORM(.9,0,1) |
3.602224479279 |
=R.QLNORM(.1,0,1,FALSE()) |
3.602224479279 |
=R.QLNORM(LN(.1),0,1,FALSE(),TRUE()) |
3.602224479279 |
=R.QLNORM(.5,1,.5) |
2.718281828459 |
=R.QLNORM(.25,0,.5) |
0.713734042808 |
=R.QLNORM(0,0,1) |
0 |
=R.QLNORM(.5,0,0) |
1 |
Practical worksheet
For logmean=0 and logsd=1, the median is 1. The 90th percentile is approximately 3.602224479279. Supplying upper-tail probability 0.1 gives the same cutoff, as does supplying LN(0.1) with lower_tail=FALSE and log_p=TRUE.
A median with logmean=1 is EXP(1), approximately 2.718281828459. Changing logsd changes the distance of noncentral quantiles from the median on the logarithmic scale; it does not move that median.
Advanced interpretation and checks
The saved roundtrip below evaluates the positive-cutoff CDF at the 90th-percentile result and recovers 0.9. Because the cutoff is positive, it does not exercise R.PLNORM’s nonpositive-cutoff upper-tail defect.
For a central 80% interval, calculate lower probabilities 0.1 and 0.9 using the same parameters. With μ=0 and σ=1 the endpoints are reciprocal, since opposite normal quantiles exponentiate to reciprocal values. The interval is asymmetric around its median on the original scale.
The saved advanced-check result for =R.PLNORM(R.QLNORM(.9,0,1),0,1) was 0.9.
Boundaries and troubleshooting
Lower probability 0 gives zero; lower probability 1 leads to an infinite quantile and #NUM!. Upper-tail endpoints reverse those outcomes. Log probability 0 represents probability 1, not zero. Inputs outside the probability domain give #NUM!.
At logsd=0, an interior probability gives EXP(logmean), but endpoints still follow the underlying normal-quantile boundary rules. A tested negative-logsd call at probability zero also returned zero because the endpoint branch precedes the spread guard; do not treat that as a valid negative-spread distribution. Nonnumeric text gives #VALUE!, empty F5 becomes zero, and wrong arity gives #N/A.
F5 is genuinely empty, rather than a cell containing an empty string.
| Formula | Gnumeric 1.12.57 result |
|---|---|
=R.QLNORM(1,0,1) |
#NUM! |
=R.QLNORM(0,0,1,FALSE()) |
#NUM! |
=R.QLNORM(1,0,1,FALSE()) |
0 |
=R.QLNORM(-.1,0,1) |
#NUM! |
=R.QLNORM(1.1,0,1) |
#NUM! |
=R.QLNORM(.5,0,-1) |
#NUM! |
=R.QLNORM(0,0,-1) |
0 |
=R.QLNORM(0,0,0) |
0 |
=R.QLNORM(1,0,0) |
#NUM! |
=R.QLNORM(0,0,1,TRUE(),TRUE()) |
#NUM! |
=R.QLNORM(1,0,1,TRUE(),TRUE()) |
#NUM! |
=R.QLNORM("abc",0,1) |
#VALUE! |
=R.QLNORM(F5,0,1) |
0 |
=R.QLNORM(.5,0) |
#N/A |
=R.QLNORM(.5,0,1,0,0,1) |
#N/A |
Official evidence and checking scope
- Current worksheet callback
- Tested-version worksheet callback
- Current qlnorm calculation
- Tested-version qlnorm calculation
- Current qnorm calculation
- Tested-version qnorm calculation
- Nonfinite worksheet-value handling
- Statistical Functions From R plugin declaration
- Quantile boundary convention
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.