Buggy code:
, new double [ ] { 0.030589580535888672 , 1.2958646899018938E-9 } , new double [ ] { 0.14982303977012634 , 1.225743062930824E-8 } } ; private static final double [ ] [ ] LN_QUICK_COEF = new double [ ] [ ] { new double [ ] { 1.0 , 5.669184079525E-24 } , new double [ ] { - 0.25 , - 0.25 } , new double [ ] { 0.3333333134651184 , 1.986821492305628E-8 } , new double [ ] { - 0.25 , - 6.663542893624021E-14 } , new double [ ] { 0.19999998807907104 , 1.1921056801463227E-8 } , new double [ ] { - 0.1666666567325592 , - 7.800414592973399E-9 } , new double [ ] { 0.1428571343421936 , 5.650007086920087E-9 } , new double [ ] { - 0.12502530217170715 , - 7.44321345601866E-11 } , new double [ ] { 0.11113807559013367 , 9.219544613762692E-9 } } ; private static final double [ ] [ ] LN_HI_PREC_COEF = new double [ ] [ ] { new double [ ] { 1.0 , - 6.032174644509064E-23 } , new double [ ] { - 0.25 , - 0.25 } , new double [ ] { 0.3333333134651184 , 1.9868161777724352E-8 } , new double [ ] { - 0.2499999701976776 , - 2.957007209750105E-8 } , new double [ ] { 0.19999954104423523 , 1.5830993332061267E-10 } , new double [ ] { - 0.16624879837036133 , - 2.6033824355191673E-8 } } ; private static final double [ ] SINE_TABLE_A = new double [ 14 ] ; private static final double [ ] SINE_TABLE_B = new double [ 14 ] ; private static final double [ ] COSINE_TABLE_A = new double [ 14 ] ; private static final double [ ] COSINE_TABLE_B = new double [ 14 ] ; private static final double [ ] TANGENT_TABLE_A = new double [ 14 ] ; private static final double [ ] TANGENT_TABLE_B = new double [ 14 ] ; private static long [ ] RECIP_2PI = new long [ ] { ( 683565275L << 32 ) | 2475754826L , ( 2131351028L << 32 ) | 2102212464L , ( 920167782L << 32 ) | 1326507024L , ( 2140428522L << 32 ) | 4155437400L , ( 1841896334L << 32 ) | 2425582776L , ( 26364858L << 32 ) | 2188665991L , ( 1065843399L << 32 ) | 743074255L , ( 3122695549L << 32 ) | 1269748001L , ( 979835913L << 32 ) | 2904022928L , ( 1315206542L << 32 ) | 1624559229L , ( 656480226L << 32 ) | 4018031118L , ( 3355321855L << 32 ) | 4152452611L , ( 4224435298L << 32 ) | 3598883655L , ( 3679297459L << 32 ) | 3388129901L , ( 3553726425L << 32 ) | 2811755147L , ( 1565126321L << 32 ) | 4210654302L , ( 3477196413L << 32 ) | 3801392314L , 2600392684L << 32 } ; private static long [ ] PI_O_4_BITS = new long [ ] { ( 3373259426L << 32 ) | 560513588L , ( 3301335691L << 32 ) | 2161908945L } ; private static final double [ ] EIGHTHES = new double [ ] { 0 , 0.125 , 0.25 , 0.375 , 0.5 , 0.625 , 0.75 , 0.875 , 1.0 , 1.125 , 1.25 , 1.375 , 1.5 , 1.625 } ; private static final double [ ] CBRTTWO = new double [ ] { 0.6299605249474366 , 0.7937005259840998 , 1.0 , 1.2599210498948732 , 1.5874010519681994 } ; private FastMath ( ) { } public static double sqrt ( final double a ) { } public static double cosh ( double x ) { } public static double sinh ( double x ) { } public static double tanh ( double x ) { } public static double acosh ( final double a ) { } public static double asinh ( double a ) { } public static double atanh ( double a ) { } public static double signum ( final double a ) { <START_BUG> return a < 0.0 ? - 1.0 : a > 0.0 ? 1.0 : Double . isNaN ( a ) ? Double . NaN : 0.0 ; <END_BUG> } public static double nextUp ( final double a ) { } public static double random ( ) { } public static double exp ( double x ) { } private static double exp ( double x , double extra , double [ ] hiPrec ) { } public static double expm1 ( double x ) { } private static double expm1 ( double x , double [ ] hiPrecOut ) { } private static double slowexp ( final double x , final double [ ] result ) { } private static void split ( final double d , final double [ ] split ) { } private static void resplit ( final double [ ] a ) { } private static void splitMult ( double [ ] a , double [ ] b , double [ ] ans ) { } private static void splitAdd ( final double [ ] a , final double [ ] b , final double [ ] ans ) { } private static void splitReciprocal ( final double [ ] in , final double [ ] result ) { } private static void quadMult ( final double [ ] a , final double [ ] b , final double [ ] result ) { } private static double expint ( int p , final double [ ] result ) { } public static double log ( final double x ) { } private static double log ( final double x , final double [ ] hiPrec ) { } public static double log1p ( final double x ) { } public static double log10 ( final double x ) { } public static double pow ( double x , double y ) { } private static double [ ] slowLog ( double xi ) { } private static double slowSin ( final double x , final double [ ] result ) { }

Fix:
return a < 0.0 ? - 1.0 : a > 0.0 ? 1.0 : a ;