Example usage for org.apache.commons.math3.util FastMath atan

List of usage examples for org.apache.commons.math3.util FastMath atan

Introduction

In this page you can find the example usage for org.apache.commons.math3.util FastMath atan.

Prototype

public static double atan(double x) 

Source Link

Document

Arctangent function

Usage

From source file:net.nicoulaj.benchmarks.math.DoubleAtan.java

@GenerateMicroBenchmark
public void commonsmath(BlackHole hole) {
    for (int i = 0; i < data.length - 1; i++)
        hole.consume(FastMath.atan(data[i]));
}

From source file:cc.redberry.core.number.ComplexUtils.java

/**
 * Numeric arctangent form complex number.
 *
 * @param complex argument/*from  www .ja  v  a 2s . c om*/
 * @return arctangent
 */
public static Complex arctan(Complex complex) {
    if (complex.isReal())
        return new Complex(FastMath.atan(complex.getReal().doubleValue()));
    return new Complex(new org.apache.commons.math3.complex.Complex(complex.getReal().doubleValue(),
            complex.getImaginary().doubleValue()).atan());
}

From source file:cc.redberry.core.number.ComplexUtils.java

/**
 * Numeric arccotangent form complex number.
 *
 * @param complex argument//w  ww.j ava 2 s .  c  o  m
 * @return arccotangent
 */
public static Complex arccot(Complex complex) {
    if (complex.isReal())
        return new Complex(FastMath.atan(1 / complex.getReal().doubleValue()));
    return new Complex(new org.apache.commons.math3.complex.Complex(complex.getReal().doubleValue(),
            complex.getImaginary().doubleValue()).reciprocal().atan());
}

From source file:com.bc.jexp.impl.DefaultNamespace.java

private void registerDefaultFunctions() {
    registerFunction(new AbstractFunction.D("sin", 1) {

        public double evalD(final EvalEnv env, final Term[] args) {
            return FastMath.sin(args[0].evalD(env));
        }/*  w  w w . ja  v a 2 s .com*/
    });
    registerFunction(new AbstractFunction.D("cos", 1) {

        public double evalD(final EvalEnv env, final Term[] args) {
            return FastMath.cos(args[0].evalD(env));
        }
    });
    registerFunction(new AbstractFunction.D("tan", 1) {

        public double evalD(final EvalEnv env, final Term[] args) {
            return FastMath.tan(args[0].evalD(env));
        }
    });
    registerFunction(new AbstractFunction.D("asin", 1) {

        public double evalD(final EvalEnv env, final Term[] args) {
            return FastMath.asin(args[0].evalD(env));
        }
    });
    registerFunction(new AbstractFunction.D("acos", 1) {

        public double evalD(final EvalEnv env, final Term[] args) {
            return FastMath.acos(args[0].evalD(env));
        }
    });
    registerFunction(new AbstractFunction.D("atan", 1) {

        public double evalD(final EvalEnv env, final Term[] args) {
            return FastMath.atan(args[0].evalD(env));
        }
    });
    registerFunction(new AbstractFunction.D("atan2", 2) {

        public double evalD(final EvalEnv env, final Term[] args) {
            return Math.atan2(args[0].evalD(env), args[1].evalD(env));
        }
    });
    registerFunction(new AbstractFunction.D("log", 1) {

        public double evalD(final EvalEnv env, final Term[] args) {
            return Math.log(args[0].evalD(env));
        }
    });

    registerFunction(new AbstractFunction.D("log10", 1) {
        public double evalD(EvalEnv env, Term[] args) throws EvalException {
            return Math.log10(args[0].evalD(env));
        }
    });

    registerFunction(new AbstractFunction.D("exp", 1) {

        public double evalD(final EvalEnv env, final Term[] args) {
            return FastMath.exp(args[0].evalD(env));
        }
    });

    registerFunction(new AbstractFunction.D("exp10", 1) {

        public double evalD(EvalEnv env, Term[] args) throws EvalException {
            return FastMath.pow(10.0, args[0].evalD(env));
        }
    });

    registerFunction(new AbstractFunction.D("sqr", 1) {

        public double evalD(final EvalEnv env, final Term[] args) {
            double v = args[0].evalD(env);
            return v * v;
        }
    });

    registerFunction(new AbstractFunction.D("sqrt", 1) {

        public double evalD(final EvalEnv env, final Term[] args) {
            return Math.sqrt(args[0].evalD(env));
        }
    });

    registerFunction(new AbstractFunction.D("pow", 2) {

        public double evalD(final EvalEnv env, final Term[] args) {
            return FastMath.pow(args[0].evalD(env), args[1].evalD(env));
        }
    });

    registerFunction(new AbstractFunction.I("min", 2) {

        public int evalI(final EvalEnv env, final Term[] args) {
            return Math.min(args[0].evalI(env), args[1].evalI(env));
        }
    });

    registerFunction(new AbstractFunction.D("min", 2) {

        public double evalD(final EvalEnv env, final Term[] args) {
            return Math.min(args[0].evalD(env), args[1].evalD(env));
        }
    });

    registerFunction(new AbstractFunction.I("max", 2) {

        public int evalI(final EvalEnv env, final Term[] args) {
            return Math.max(args[0].evalI(env), args[1].evalI(env));
        }
    });

    registerFunction(new AbstractFunction.D("max", 2) {

        public double evalD(final EvalEnv env, final Term[] args) {
            return Math.max(args[0].evalD(env), args[1].evalD(env));
        }
    });

    registerFunction(new AbstractFunction.D("floor", 1) {
        public double evalD(EvalEnv env, Term[] args) throws EvalException {
            return Math.floor(args[0].evalD(env));
        }
    });

    registerFunction(new AbstractFunction.D("round", 1) {
        public double evalD(EvalEnv env, Term[] args) throws EvalException {
            return Math.round(args[0].evalD(env));
        }
    });

    registerFunction(new AbstractFunction.D("ceil", 1) {
        public double evalD(EvalEnv env, Term[] args) throws EvalException {
            return Math.ceil(args[0].evalD(env));
        }
    });

    registerFunction(new AbstractFunction.D("rint", 1) {
        public double evalD(EvalEnv env, Term[] args) throws EvalException {
            return Math.rint(args[0].evalD(env));
        }
    });

    registerFunction(new AbstractFunction.I("sign", 1) {

        public int evalI(final EvalEnv env, final Term[] args) {
            return ExtMath.sign(args[0].evalI(env));
        }
    });

    registerFunction(new AbstractFunction.D("sign", 1) {

        public double evalD(final EvalEnv env, final Term[] args) {
            return ExtMath.sign(args[0].evalD(env));
        }
    });

    registerFunction(new AbstractFunction.I("abs", 1) {

        public int evalI(final EvalEnv env, final Term[] args) {
            return Math.abs(args[0].evalI(env));
        }
    });

    registerFunction(new AbstractFunction.D("abs", 1) {

        public double evalD(final EvalEnv env, final Term[] args) {
            return Math.abs(args[0].evalD(env));
        }
    });

    registerFunction(new AbstractFunction.D("deg", 1) {

        public double evalD(final EvalEnv env, final Term[] args) {
            return Math.toDegrees(args[0].evalD(env));
        }
    });

    registerFunction(new AbstractFunction.D("rad", 1) {

        public double evalD(final EvalEnv env, final Term[] args) {
            return Math.toRadians(args[0].evalD(env));
        }
    });

    registerFunction(new AbstractFunction.D("ampl", 2) {

        public double evalD(final EvalEnv env, final Term[] args) {
            final double a = args[0].evalD(env);
            final double b = args[1].evalD(env);
            return Math.sqrt(a * a + b * b);
        }
    });

    registerFunction(new AbstractFunction.D("phase", 2) {

        public double evalD(final EvalEnv env, final Term[] args) {
            final double a = args[0].evalD(env);
            final double b = args[1].evalD(env);
            return Math.atan2(b, a);
        }
    });

    registerFunction(new AbstractFunction.B("feq", 2) {
        public boolean evalB(EvalEnv env, Term[] args) throws EvalException {
            final double x1 = args[0].evalD(env);
            final double x2 = args[1].evalD(env);
            return ExtMath.feq(x1, x2, EPS);
        }
    });

    registerFunction(new AbstractFunction.B("feq", 3) {
        public boolean evalB(EvalEnv env, Term[] args) throws EvalException {
            final double x1 = args[0].evalD(env);
            final double x2 = args[1].evalD(env);
            final double eps = args[2].evalD(env);
            return ExtMath.feq(x1, x2, eps);
        }
    });

    registerFunction(new AbstractFunction.B("fneq", 2) {
        public boolean evalB(EvalEnv env, Term[] args) throws EvalException {
            final double x1 = args[0].evalD(env);
            final double x2 = args[1].evalD(env);
            return ExtMath.fneq(x1, x2, EPS);
        }
    });

    registerFunction(new AbstractFunction.B("fneq", 3) {
        public boolean evalB(EvalEnv env, Term[] args) throws EvalException {
            final double x1 = args[0].evalD(env);
            final double x2 = args[1].evalD(env);
            final double eps = args[2].evalD(env);
            return ExtMath.fneq(x1, x2, eps);
        }
    });

    registerFunction(new AbstractFunction.B("inf", 1) {
        public boolean evalB(EvalEnv env, Term[] args) throws EvalException {
            return Double.isInfinite(args[0].evalD(env));
        }
    });

    registerFunction(new AbstractFunction.B("nan", 1) {
        public boolean evalB(EvalEnv env, Term[] args) throws EvalException {
            return Double.isNaN(args[0].evalD(env));
        }
    });

    registerFunction(new AbstractFunction.D("distance", -1) {

        public double evalD(final EvalEnv env, final Term[] args) {
            double sqrSum = 0.0;
            final int n = args.length / 2;
            for (int i = 0; i < n; i++) {
                final double v = args[i + n].evalD(env) - args[i].evalD(env);
                sqrSum += v * v;
            }
            return Math.sqrt(sqrSum);
        }
    });

    registerFunction(new AbstractFunction.D("distance_deriv", -1) {

        public double evalD(final EvalEnv env, final Term[] args) {
            double sqrSum = 0.0;
            final int n = args.length / 2;
            for (int i = 0; i < n - 1; i++) {
                final double v1 = args[i + 1].evalD(env) - args[i].evalD(env);
                final double v2 = args[i + n + 1].evalD(env) - args[i + n].evalD(env);
                sqrSum += (v1 - v2) * (v1 - v2);
            }
            return Math.sqrt(sqrSum);
        }
    });

    registerFunction(new AbstractFunction.D("distance_integ", -1) {

        public double evalD(final EvalEnv env, final Term[] args) {
            double sqrSum = 0.0;
            double v1Sum = 0.0;
            double v2Sum = 0.0;
            final int n = args.length / 2;
            for (int i = 0; i < n; i++) {
                v1Sum += args[i].evalD(env);
                v2Sum += args[i + n].evalD(env);
                sqrSum += (v2Sum - v1Sum) * (v2Sum - v1Sum);
            }
            return Math.sqrt(sqrSum);
        }
    });

    registerFunction(new AbstractFunction.B("inrange", -1) {

        public boolean evalB(final EvalEnv env, final Term[] args) {
            final int n1 = args.length / 3;
            final int n2 = n1 + args.length / 3;
            for (int i = 0; i < n1; i++) {
                final double v = args[i].evalD(env);
                final double v1 = args[i + n1].evalD(env);
                final double v2 = args[i + n2].evalD(env);
                if (v < v1 || v > v2) {
                    return false;
                }
            }
            return true;
        }
    });

    registerFunction(new AbstractFunction.B("inrange_deriv", -1) {

        public boolean evalB(final EvalEnv env, final Term[] args) {
            final int n1 = args.length / 3;
            final int n2 = 2 * n1;
            for (int i = 0; i < n1 - 1; i++) {
                final double v = args[i + 1].evalD(env) - args[i].evalD(env);
                final double v1 = args[i + n1 + 1].evalD(env) - args[i + n1].evalD(env);
                final double v2 = args[i + n2 + 1].evalD(env) - args[i + n2].evalD(env);
                if (v < v1 || v > v2) {
                    return false;
                }
            }
            return true;
        }
    });

    registerFunction(new AbstractFunction.B("inrange_integ", -1) {

        public boolean evalB(final EvalEnv env, final Term[] args) {
            final int n1 = args.length / 3;
            final int n2 = 2 * n1;
            double vSum = 0.0;
            double v1Sum = 0.0;
            double v2Sum = 0.0;
            for (int i = 0; i < n1; i++) {
                vSum += args[i].evalD(env);
                v1Sum += args[i + n1].evalD(env);
                v2Sum += args[i + n2].evalD(env);
                if (vSum < v1Sum || vSum > v2Sum) {
                    return false;
                }
            }
            return true;
        }
    });

}

From source file:Tester2.java

private static double[] Convert_To_Lat_Long(Vector3D posVec) {
    double Xcomp = posVec.getX();
    double Ycomp = posVec.getY();
    double Zcomp = posVec.getZ();

    double longitude;
    double latitude;
    double altitude;

    //Done so all cases of longitudes are right
    if (Ycomp > 0) {
        if (Xcomp > 0) {
            longitude = FastMath.toDegrees(FastMath.atan(Ycomp / Xcomp));
        } else {/*from   w w  w  .  j a  va  2s  . c om*/
            longitude = 180 - FastMath.toDegrees(FastMath.atan(FastMath.abs(Ycomp / Xcomp)));
        }
    } else {
        if (Xcomp > 0) {
            longitude = -1 * FastMath.toDegrees(FastMath.atan(FastMath.abs(Ycomp / Xcomp)));
        } else {
            longitude = -1 * (180 - FastMath.toDegrees(FastMath.atan(Ycomp / Xcomp)));
        }
    }

    //Calculate latitude
    latitude = FastMath.toDegrees(FastMath.atan(Zcomp / FastMath.sqrt(Xcomp * Xcomp + Ycomp * Ycomp)));

    //Calculate radius and altitude
    double EER = Constants.WGS84_EARTH_EQUATORIAL_RADIUS; //Earth Equator Radius in meters
    double EPR = EER - EER * Constants.WGS84_EARTH_FLATTENING; //Earth Polar Radius in meters

    double earthRadius = FastMath.sqrt((FastMath.pow(EPR * EPR * FastMath.cos(latitude), 2)
            + FastMath.pow(EER * EER * FastMath.cos(latitude), 2))
            / (FastMath.pow(EPR * FastMath.cos(latitude), 2) + FastMath.pow(EER * FastMath.cos(latitude), 2)));
    double orbitRadius = FastMath.sqrt(Xcomp * Xcomp + Ycomp * Ycomp + Zcomp * Zcomp);
    altitude = orbitRadius - earthRadius;

    return new double[] { latitude, longitude, altitude };
}

From source file:de.tuberlin.uebb.jbop.example.DSCompilerOnlyCompose.java

@Override
public void atan(final double[] operand, final double[] result) {

    // create the function value and derivatives
    final double[] function = new double[1 + order];
    final double x = operand[0];
    function[0] = FastMath.atan(x);
    if (order > 0) {
        // the nth order derivative of atan has the form:
        // dn(atan(x)/dxn = Q_n(x) / (1 + x^2)^n
        // where Q_n(x) is a degree n-1 polynomial with same parity as n-1
        // Q_1(x) = 1, Q_2(x) = -2x, Q_3(x) = 6x^2 - 2 ...
        // the general recurrence relation for Q_n is:
        // Q_n(x) = (1+x^2) Q_(n-1)'(x) - 2(n-1) x Q_(n-1)(x)
        // as per polynomial parity, we can store coefficients of both Q_(n-1) and Q_n in the same array
        final double[] q = new double[order];
        q[0] = 1;//from  ww  w. j a  v a 2 s . co  m
        final double x2 = x * x;
        final double f = 1.0 / (1 + x2);
        double coeff = f;
        function[1] = coeff * q[0];
        for (int n = 2; n <= order; ++n) {

            // update and evaluate polynomial Q_n(x)
            double v = 0;
            q[n - 1] = -n * q[n - 2];
            for (int k = n - 1; k >= 0; k -= 2) {
                v = (v * x2) + q[k];
                if (k > 2) {
                    q[k - 2] = ((k - 1) * q[k - 1]) + ((k - 1 - (2 * n)) * q[k - 3]);
                } else if (k == 2) {
                    q[0] = q[1];
                }
            }
            if ((n & 0x1) == 0) {
                v *= x;
            }

            coeff *= f;
            function[n] = coeff * v;

        }
    }

    // apply function composition
    compose(operand, function, result);

}

From source file:de.tuberlin.uebb.jbop.example.DSCompiler.java

@Override
@Optimizable//from  w  w w . j a v  a 2s. co m
@StrictLoops
public void atan(final double[] operand, final double[] result) {

    // create the function value and derivatives
    final double[] function = new double[1 + order];
    final double x = operand[0];
    function[0] = FastMath.atan(x);
    if (order > 0) {
        // the nth order derivative of atan has the form:
        // dn(atan(x)/dxn = Q_n(x) / (1 + x^2)^n
        // where Q_n(x) is a degree n-1 polynomial with same parity as n-1
        // Q_1(x) = 1, Q_2(x) = -2x, Q_3(x) = 6x^2 - 2 ...
        // the general recurrence relation for Q_n is:
        // Q_n(x) = (1+x^2) Q_(n-1)'(x) - 2(n-1) x Q_(n-1)(x)
        // as per polynomial parity, we can store coefficients of both Q_(n-1) and Q_n in the same array
        final double[] q = new double[order];
        q[0] = 1;
        final double x2 = x * x;
        final double f = 1.0 / (1 + x2);
        double coeff = f;
        function[1] = coeff * q[0];
        for (int n = 2; n <= order; ++n) {

            // update and evaluate polynomial Q_n(x)
            double v = 0;
            q[n - 1] = -n * q[n - 2];
            for (int k = n - 1; k >= 0; k -= 2) {
                v = (v * x2) + q[k];
                if (k > 2) {
                    q[k - 2] = ((k - 1) * q[k - 1]) + ((k - 1 - (2 * n)) * q[k - 3]);
                } else if (k == 2) {
                    q[0] = q[1];
                }
            }
            if ((n & 0x1) == 0) {
                v *= x;
            }

            coeff *= f;
            function[n] = coeff * v;

        }
    }

    // apply function composition
    compose(operand, function, result);

}

From source file:org.esa.beam.util.math.FastMathPerformance.java

public void testAtan() {
    System.gc();//from  w w  w.j  a  v  a2 s.  c o m
    double x = 0;
    long time = System.nanoTime();
    for (int i = 0; i < RUNS; i++)
        x += StrictMath.atan(i * F1);
    long strictTime = System.nanoTime() - time;

    System.gc();
    double y = 0;
    time = System.nanoTime();
    for (int i = 0; i < RUNS; i++)
        y += FastMath.atan(i * F1);
    long fastTime = System.nanoTime() - time;

    System.gc();
    double z = 0;
    time = System.nanoTime();
    for (int i = 0; i < RUNS; i++)
        z += Math.atan(i * F1);
    long mathTime = System.nanoTime() - time;

    report("atan", x + y + z, strictTime, fastTime, mathTime);
}

From source file:org.esa.beam.util.math.FastMathTest.java

@Test
public void testMathATanFast() {
    for (double i = 0; i < numItr; ++i) {
        double val = FastMath.atan(i);
    }/*from w w w  .  ja v a2 s .co m*/
}

From source file:org.esa.snap.engine_utilities.eo.GeoUtils.java

/**
 * Convert cartesian XYZ coordinate into geodetic coordinate with specified geodetic system.
 *
 * @param xyz       The xyz coordinate of the given pixel.
 * @param geoPos    The geodetic coordinate of the given pixel.
 * @param geoSystem The geodetic system.
 *///from  w  w w  .j  a va2s . c o  m
public static void xyz2geo(final double xyz[], final GeoPos geoPos, final EarthModel geoSystem) {

    double a = 0.0;
    double b = 0.0;
    double e2 = 0.0;
    double ep2 = 0.0;

    if (geoSystem == EarthModel.WGS84) {

        a = WGS84.a;
        b = WGS84.b;
        e2 = WGS84.e2;
        ep2 = WGS84.ep2;

    } else if (geoSystem == EarthModel.GRS80) {

        a = GRS80.a;
        b = GRS80.b;
        e2 = GRS80.e2;
        ep2 = GRS80.ep2;

    } else {
        throw new OperatorException("Incorrect geodetic system");
    }

    final double x = xyz[0];
    final double y = xyz[1];
    final double z = xyz[2];
    final double s = Math.sqrt(x * x + y * y);
    final double theta = FastMath.atan(z * a / (s * b));

    geoPos.lon = (float) (FastMath.atan(y / x) * Constants.RTOD);

    if (geoPos.lon < 0.0 && y >= 0.0) {
        geoPos.lon += 180.0;
    } else if (geoPos.lon > 0.0 && y < 0.0) {
        geoPos.lon -= 180.0;
    }

    geoPos.lat = (float) (FastMath.atan((z + ep2 * b * FastMath.pow(FastMath.sin(theta), 3))
            / (s - e2 * a * FastMath.pow(FastMath.cos(theta), 3))) * Constants.RTOD);
}