package mikera.util.mathz;
/**
* Mostly experimental. Alternative implementation sof maths functions.
*
*
* @author Mike
*
*/
public class AlternativeMaths {
/** Branchless min for ints */
public static int min2(int a, int b) {
return a^((a^b) & ((b-a)>>31));
}
/** Branchless max for ints */
public static int max2(int a, int b) {
return a^((a^b) & ((a-b)>>31));
}
/**
* Fast branchless integer sign
* Not correct for MIN_INTEGER - but valid for all other int values
*/
public static int sign2fast(int a) {
return 1+(a>>31)+((a-1)>>31);
}
public static double tanh (double x) {
double ex=Math.exp(2*x);
double df=((ex-1)/(ex+1));
if (Double.isNaN(df)) return (x>0)?1:-1;
return df;
}
/**
* Mike's fast integer sign algorithm
* @param a
* @return Sign of the given number (-1, 0 or 1)
*/
public static final int sign2(int a) {
return (a>>31)+((a>0)?1:0);
}
}
Ads help maintain this website.