commons-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Gilles (JIRA)" <j...@apache.org>
Subject [jira] Created: (MATH-387) Duplicate code
Date Fri, 16 Jul 2010 14:56:49 GMT
Duplicate code
--------------

                 Key: MATH-387
                 URL: https://issues.apache.org/jira/browse/MATH-387
             Project: Commons Math
          Issue Type: Improvement
    Affects Versions: 2.1
            Reporter: Gilles
            Priority: Minor
             Fix For: 2.2


In package optimization:

{code:title=SimpleRealPointChecker.java|borderStyle=solid}
public boolean converged(final int iteration, final RealPointValuePair previous, final RealPointValuePair
current) {
    final double[] p        = previous.getPoint();
    final double[] c        = current.getPoint();
    for (int i = 0; i < p.length; ++i) {
        final double difference = Math.abs(p[i] - c[i]);
        final double size       = Math.max(Math.abs(p[i]), Math.abs(c[i]));
        if ((difference > (size * relativeThreshold)) && (difference > absoluteThreshold))
{
            return false;
        }
    }
    return true;
}
{code}

{code:title=SimpleVectorialPointChecker.java|borderStyle=solid}
public boolean converged(final int iteration, final VectorialPointValuePair previous, final
VectorialPointValuePair current) {
    final double[] p = previous.getPointRef();
    final double[] c = current.getPointRef();
    for (int i = 0; i < p.length; ++i) {
        final double pi         = p[i];
        final double ci         = c[i];
        final double difference = Math.abs(pi - ci);
        final double size       = Math.max(Math.abs(pi), Math.abs(ci));
        if ((difference > (size * relativeThreshold)) &&
            (difference > absoluteThreshold)) {
            return false;
        }
    }
    return true;
}
{code}

Do they do the same thing or am I missing something?

Also in
{code:title=SimpleScalarValueChecker.java|borderStyle=solid}
public boolean converged(final int iteration, final RealPointValuePair previous, final RealPointValuePair
current) {
    final double p          = previous.getValue();
    final double c          = current.getValue();
    final double difference = Math.abs(p - c);
    final double size       = Math.max(Math.abs(p), Math.abs(c));
    return (difference <= (size * relativeThreshold)) || (difference <= absoluteThreshold);
}
{code}

it seems overkill that one must create two {{RealPointValuePair}} objects when one just wants
to compare two {{double}}. Shouldn't this class contain a method like

{code}
public boolean converged(int iteration, double previous, double current) {
    final double difference = Math.abs(previous - current);
    final double size       = Math.max(Math.abs(previous), Math.abs(current));
    return (difference <= (size * relativeThreshold)) || (difference <= absoluteThreshold);
{code}
?

Also none of these methods seem to need an {{iteration}} parameter.


-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


Mime
View raw message