Java StrictMath ulp()方法与示例

StrictMath类ulp()方法

语法:

    public static double ulp(double do);
    public static float ulp(float fl);
  • ulp()方法在java.lang包中可用。

  • ulp(double do)方法用于返回方法中给定参数的ulp的大小。在此方法中,给定双值参数的ulp是双浮点值与下一个幅度较大的给定自变量double值之间的正距离。

  • ulp(float fl)方法用于返回方法中给定参数的ulp的大小。在此方法中,给定浮点值参数的ulp是浮点浮点值与给定自变量浮点值之间的正距离,其大小随后更大。

  • 这些方法不会引发异常。

  • 这些是静态方法,可以使用类名进行访问,如果尝试使用类对象访问这些方法,则不会出现任何错误。

参数:

  • float / double-表示该值表示要返回其ulp的double浮点值。

返回值:

该方法的返回类型为float / double,它返回给定参数的ulp的大小,返回值为float / double类型。

注意:

  • 如果我们通过NaN,则该方法返回相同的值(即NaN)。

  • 如果我们传递无穷大(正数或负数),则该方法将返回正无穷大。

  • 如果传递零(正数或负数),则该方法返回Float.MIN_VALUE / Double.MIN_VALUE。

  • 如果我们传递Float.MAX_VALUE,则该方法将2提升为104的幂;如果我们传递Double.MAX_VALUE,则该方法将2提升为971的幂。

示例

//Java程序演示示例 
//signum()StrictMath类的方法

public class Ulp {
    public static void main(String[] args) {
        //变量声明
        double d1 = 0.0;
        double d2 = -0.0;
        double d3 = 7.0 / 0.0;
        double d4 = -7.0 / 0.0;
        double d5 = 1285.45;

        float f1 = 0.0f;
        float f2 = -0.0f;
        float f3 = 7.0f / 0.0f;
        float f4 = -7.0f / 0.0f;
        float f5 = 1285.45f;

        System.out.println();
        System.out.println("ulp(double d:)");

        //显示d1,d2,d3,d4和d5的先前值
        System.out.println("d1:" + d1);
        System.out.println("d2: " + d2);
        System.out.println("d3: " + d3);
        System.out.println("d4: " + d4);
        System.out.println("d5: " + d5);

        //显示f1,f2,f3,f4和d5的先前值
        System.out.println("f1: " + f1);
        System.out.println("f2: " + f2);
        System.out.println("f3: " + f3);
        System.out.println("f4: " + f4);
        System.out.println("f5: " + f5);


        //在这里,我们将得到(Double.MIN_VALUE),因为
        //我们正在传递参数(0.0)
        System.out.println("StrictMath.ulp(d1): " + StrictMath.ulp(d1));

        //在这里,我们将得到(Double.MIN_VALUE),因为
        //我们正在传递参数(-0.0) 
        System.out.println("StrictMath.ulp(d2): " + StrictMath.ulp(d2));

        //在这里,我们将得到(Infinity)因为
        //我们正在传递参数(7.0 / 0.0) 
        System.out.println("StrictMath.ulp(d2): " + StrictMath.ulp(d3));

        //在这里,我们将得到(Infinity)因为 
        //我们正在传递参数(-7.0 / 0.0)
        System.out.println("StrictMath.ulp(d2): " + StrictMath.ulp(d4));

        //在这里,我们将得到(提高2到971的幂),因为
        //我们正在传递参数(1285.45)
        System.out.println("StrictMath.ulp(d5): " + StrictMath.ulp(d5));

        System.out.println();
        System.out.println("ulp(float fl:)");

        //在这里,我们将得到(Float.MIN_VALUE),因为 
        //我们正在传递参数(0.0)
        System.out.println("StrictMath.ulp(f1): " + StrictMath.ulp(f1));

        //在这里,我们将得到(Float.MIN_VALUE),因为 
        //我们正在传递参数(-0.0) 
        System.out.println("StrictMath.ulp(f2): " + StrictMath.ulp(f2));

        //在这里,我们将得到(Infinity)因为 
        //我们正在传递参数(7.0 / 0.0) 
        System.out.println("StrictMath.ulp(f3): " + StrictMath.ulp(f3));

        //在这里,我们将得到(Infinity)因为 
        //我们正在传递参数(-7.0 / 0.0) 
        System.out.println("StrictMath.ulp(f4): " + StrictMath.ulp(f4));

        //在这里,我们将得到(提高2到971的幂),因为
        //我们正在传递参数(1285.45) 
        System.out.println("StrictMath.ulp(f5): " + StrictMath.ulp(f5));
    }
}

输出结果

ulp(double d:)
d1:0.0
d2: -0.0
d3: Infinity
d4: -Infinity
d5: 1285.45
f1: 0.0
f2: -0.0
f3: Infinity
f4: -Infinity
f5: 1285.45
StrictMath.ulp(d1): 4.9E-324
StrictMath.ulp(d2): 4.9E-324
StrictMath.ulp(d2): Infinity
StrictMath.ulp(d2): Infinity
StrictMath.ulp(d5): 2.2737367544323206E-13

ulp(float fl:)
StrictMath.ulp(f1): 1.4E-45
StrictMath.ulp(f2): 1.4E-45
StrictMath.ulp(f3): Infinity
StrictMath.ulp(f4): Infinity
StrictMath.ulp(f5): 1.2207031E-4