Certo che la differenza tra float e double è notevole:

codice:
import static java.lang.Math.*;

class Esempio {
	public static void main(String args[]) {
		double x,y;
		double b = 999999999999D;
		double c;
		x = ulp(b);
		y = nextAfter(b,b+1);
		c = b+ulp(b);
		System.out.println(x);
		System.out.println(y);
		System.out.println(c);
		float xf,yf;
		float bf = 999999999999F;
		float cf;
		xf = ulp(bf);
		yf = nextAfter(bf,bf+1);
		cf = bf+ulp(bf);
		System.out.println(xf);
		System.out.println(yf);
		System.out.println(cf);
	}

}
1.220703125E-4
9.999999999990001E11
9.999999999990001E11
65536.0
1.0E12
1.00000006E12