Allow lambda zero for parametrization in Exp distribution. #972
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This allows the parameter
lambda = 0
in the distributionExp
.Implementation
Taking advantage that
1 / 0 = infinity
, we change nothing in the implementation, i.e. a sample fromExp(lambda)
is the result of a sample fromExp1
multiplied by1 / lambda
.Performance
This makes the sampling from
Exp(lambda = 0)
lose time sampling fromExp1
when there is no need since the result is always infinity. This is okay since it is not the common case.Documentation
The error
LambdaTooSmall
accounts now only for negative or NaN parameterslambda
.Also, In the documentation for
Exp
, there are two changes: the explanation of density and constructornew
. Please check the style of this.In the explanation of the density, we included the case
lambda = 0
, assuming that the user is using primitives (most of the cases).In the constructor
new
, a remark was added. It seems a bit overly complicated, but this is because of the traitN: Float
. SinceFloat
has noinfinity
method, we rely on the behaviour of1 / 0
of the custom typeN
. I made this explicit by explaining the implementation itself! I did not come up with a better explanation.