# [Scipy-tickets] [SciPy] #807: More accurate tail probability and quantile for exponential distribution

SciPy scipy-tickets@scipy....
Mon Dec 1 06:49:56 CST 2008

```#807: More accurate tail probability and quantile for exponential distribution
-------------------------+--------------------------------------------------
Reporter:  pbrod        |       Owner:  somebody
Type:  enhancement  |      Status:  new
Priority:  normal       |   Milestone:  0.8
Component:  scipy.stats  |     Version:  devel
Severity:  normal       |    Keywords:
-------------------------+--------------------------------------------------
The sf and isf functions for the exponential distribution are inaccurate
for small upper tail probabilities as exemplified here:
{{{
In [108]: import scipy.stats.distributions as dst
In [109]: dst.expon.isf(dst.expon.sf(40))
Out[109]: 1.#INF
}}}
The exact quantile in this case is 40.

For small lower tails the probabilities are truncated to zero as shown
here:
{{{
In [113]: dst.expon.cdf(1e-18)
Out[113]: 0.0
}}}
but it should be 1e-18.

Solution: put the following methods in the expon_gen class

{{{
def _cdf(self, x):
return -expm1(-x)
def _sf(self,x):
return exp(-x)
def _isf(self,q):
return -log(q)
}}}

In general there are several places in scipy.stats.distributions where one
can improve the accuracy of the calculations by just replacing expressions
involving
log(1+x) and exp(x)-1 with log1p(x) and expm1(x), respectively.

--
Ticket URL: <http://scipy.org/scipy/scipy/ticket/807>
SciPy <http://www.scipy.org/>
SciPy is open-source software for mathematics, science, and engineering.
```