public class FrexpExample {
public static void main(String[] args) {
double d = 3.14;
int[] exponent = new int[1];
double fraction = frexp(d, exponent);
System.out.printf("fraction = %.6f exponent = %d%n", fraction, exponent[0]);
}
public static double frexp(double value, int[] exp) {
if (value == 0.0) {
exp[0] = 0;
return 0.0;
}
long bits = Double.doubleToRawLongBits(value);
int rawExp = (int)((bits >> 52) & 0x7FFL);
if (rawExp == 0) { // subnormal
value *= Math.pow(2, 54);
bits = Double.doubleToRawLongBits(value);
rawExp = (int)((bits >> 52) & 0x7FFL);
rawExp -= 54;
}
exp[0] = rawExp - 1022;
return value / Math.pow(2, exp[0]);
}
}
/*
run:
fraction = 0.785000 exponent = 2
*/