如果要理解什么是ulp,先要了解在计算机中保存的数和我们在数学上认为的数是不一样的;
比方说2.0和3.0之间有多少个数,在数学中是无限的,但是在计算机中是有限的,因为计算机需要用一堆字节来表示double或者float,但是因为计算机表示不了无限的数(因为没有无限内存)。
所以就有了ulp,假设在float
2.0和3.0之间有8,388,609个数,那么在2.0和3.0之间的数的ulp就是8,388,609/1.0约等于0.0000001。
你如果想知道某一个具体的double或float的先一个或者上一个数字是什么可以使用函数
public static double nextAfter(float start, float direction)
public static double nextAfter(double start, double direction)