_AMDG_ icon

Fast Trig

_AMDG_ | PRO | 09/19/15 03:18:37 AM UTC | 0 ⭐ | 397 👁️ | Never ⏰ | []
Java |

1.91 KB

|

None

|

0 👍

/

0 👎

/**
 * 
 */
package math;
 
/**
 * @author Link
 *
 */
public class Main {
 
    private static final double pi180 = Math.PI / 180;
 
    private static final int T1 = 6, T2 = 120, T3 = 5_040, T4 = 362_880, T5 = 39_916_800;
    private static final long T6 = 6_227_020_800L, T7 = 1_307_674_368_000L, T8 = 355_687_428_096_000L,
            t9 = 121_645_100_408_832_000L;
 
    public static void main(String... args) {
        long t = System.currentTimeMillis();
        System.out.println("Math.tan(x) = " + Math.tan(pi180 * 140d));
        System.out.println("time (ms): " + (System.currentTimeMillis() - t));
        t = System.currentTimeMillis();
        System.out.println("tangent(x) = " + tan(140d));
        System.out.println("time (ms): " + (System.currentTimeMillis() - t));
        System.out.println("Math.tan(x) = " + Math.tan(pi180 * 135.5d));
        System.out.println("time (ms): " + (System.currentTimeMillis() - t));
        t = System.currentTimeMillis();
        System.out.println("tangent(x) = " + tan(140d));
        System.out.println("time (ms): " + (System.currentTimeMillis() - t));
    }
 
    /**
     * Faster sine algorithm. Limit -360 to 360.
     * 
     * @param x
     *            x in radians
     * @return the sine of x
     */
    public static double sine(double x) {
        final double x1 = x, x2 = x1 * x1;
        // numerators
        final double n1 = x1 * x2, n2 = n1 * x2, n3 = n2 * x2, n4 = n3 * x2, n5 = n4 * x2, n6 = n5 * x2, n7 = n6 * x2,
                n8 = n7 * x2, n9 = n8 * x2;
        return (x1) - (n1 / T1) + (n2 / T2) - (n3 / T3) + (n4 / T4) - (n5 / T5) + (n6 / T6) - (n7 / T7) + (n8 / T8)
                - (n9 / t9);
    }
 
    public static double sin(double x) {
        return sine(pi180 * x);
    }
 
    public static double cosine(double x) {
        return sine(Math.PI / 2 - x);
    }
 
    public static double cos(double x) {
        return cosine(pi180 * x);
    }
 
    public static double tangent(double x) {
        return cosine(x) / sine(x);
    }
 
    public static double tan(double x) {
        return tangent(pi180 * x);
    }
}

Comments