public static double cos ( double x ) { int quadrant = 0 ; /* Take absolute value of the input */ double xa = x ; if ( x < 0 ) { xa = - xa ; } if ( xa != xa || xa == Double . POSITIVE_INFINITY ) { return Double . NaN ; } /* Perform any argument reduction */ double xb = 0 ; if ( xa > 3294198.0 ) { // PI * (2**20) // Argument too big for CodyWaite reduction. Must use // PayneHanek. double reduceResults [ ] = new double [ 3 ] ; reducePayneHanek ( xa , reduceResults ) ; quadrant = ( ( int ) reduceResults [ 0 ] ) & 3 ; xa = reduceResults [ 1 ] ; xb = reduceResults [ 2 ] ; } else if ( xa > 1.5707963267948966 ) { final CodyWaite cw = new CodyWaite ( xa ) ; quadrant = cw . getK ( ) & 3 ; xa = cw . getRemA ( ) ; xb = cw . getRemB ( ) ; } //if (negative) // quadrant = (quadrant + 2) % 4; switch ( quadrant ) { case 0 : return cosQ ( xa , xb ) ; case 1 : return - sinQ ( xa , xb ) ; case 2 : return - cosQ ( xa , xb ) ; case 3 : return sinQ ( xa , xb ) ; default : return Double . NaN ; } }
Cosine function .