commons-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Gilles Sadowski <>
Subject [Math] Package for "UnivariateRealFunction"s
Date Wed, 27 Oct 2010 10:46:15 GMT

What do you think of creating a "function" package that would contain all
the usual functions as classes implementing the "UnivariateRealFunction"
interface?  I.e. for example:
package org.apache.commons.math.function;

import org.apache.commons.math.util.FastMath;

public class Cos implements UnivariateRealFunction {
    public double value(double x) {
        return FastMath.cos(x);

In the above, there is also a hidden request: I would like to remove the
checked "FunctionEvaluationException" from the interface. As mentioned
recently in a [VFS] thread, the only argument in favor of checked exceptions
is in situations where the code really implements local retries. What would
you retry here? [If the answer is "Another value for the parameter x", that
would just mean that we should instead throw an "IllegalArgumentException"
for the x that lead to failure.]
This will hugely simplify user (and CM) code.
I will create a new (unchecked) "FunctionEvaluationException" in package
"exception" so that current users of the exception would just have to do a
global search and replace:

import org.apache.commons.math.FunctionEvaluationException
 --> import org.apache.commons.math.exception.FunctionEvaluationException

And their existing try/catch blocks will continue to work seamlessly.

Coming back to the first issue, the advantage of having function objects is
that, for example, we could remove quite some repetitive code in the
interface "RealVector" and its "ArrayRealVector" implementation: All the
"map...ToSelf" methods could be reduced to:
public ArrayRealVector mapToSelf(UnivariateRealFunction f) {
    for (int i = 0; i < data.length; i++) {
        data[i] = f.value(data[i]);
    return this;

We could also move all the already existing function objects used in the
unit tests; after all, they might be useful for CM users for devising the
unit tests for their own code.


To unsubscribe, e-mail:
For additional commands, e-mail:

View raw message