[
https://issues.apache.org/jira/browse/MATH-803?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13292525#comment-13292525
]
Luc Maisonobe commented on MATH-803:
------------------------------------
Perhaps we should use a post-processing branch to handle infinite or spacial
values:
{code}
// current implementation looping over non-zero instance elements goes here
if (v.isNaN() || v.isInfinite()) {
// post-processing loop, to handle 0 * infinity and 0 * NaN cases
for (int i = 0; i < v.getDimension(); ++v) {
if (Double.isInfinite(v.getElement(i)) || Double.isNaN(v.getElement(i)) {
res.setEntry(i, Double.NaN);
}
}
}
{code}
This could be fast only if isNaN() and isInfinite() results are cached and the
same vector is reused, otherwise the outer if statement should be removed and
the post-processing should be done in all cases.
> Bugs in OpenMapRealVector.ebeMultiply(RealVector) and ebeDivide(RealVector)
> ---------------------------------------------------------------------------
>
> Key: MATH-803
> URL: https://issues.apache.org/jira/browse/MATH-803
> Project: Commons Math
> Issue Type: Bug
> Affects Versions: 3.0
> Reporter: Sébastien Brisard
> Assignee: Sébastien Brisard
>
> {{OpenMapRealVector.ebeMultiply(RealVector)}} and
> {{OpenMapRealVector.ebeDivide(RealVector)}} return wrong values when one
> entry of the specified {{RealVector}} is nan or infinity. The bug is easy to
> understand. Here is the current implementation of {{ebeMultiply}}
> {code:java}
> public OpenMapRealVector ebeMultiply(RealVector v) {
> checkVectorDimensions(v.getDimension());
> OpenMapRealVector res = new OpenMapRealVector(this);
> Iterator iter = entries.iterator();
> while (iter.hasNext()) {
> iter.advance();
> res.setEntry(iter.key(), iter.value() * v.getEntry(iter.key()));
> }
> return res;
> }
> {code}
> The assumption is that for any double {{x}}, {{x * 0d == 0d}} holds, which is
> not true. The bug is easy enough to identify, but more complex to solve. The
> only solution I can come up with is to loop through *all* entries of v
> (instead of those entries which correspond to non-zero entries of this). I'm
> afraid about performance losses.
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators:
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira