Java中的溢出浮动

时间:2014-12-17 21:38:40

标签: java floating-point

import java.lang.*;

import java.math.*;

public class CFloatExample
{

    // --------------------------------------------------------------------------------
    // Name: main
    // Abstract: This is where the program starts.  
    // --------------------------------------------------------------------------------
    public static void main( String astrCommandLine[] )
    {

        // Declare float variables 
    float fltMinimum = 0;
    float fltMaximum = 0;

    // Set to min/max value of float
    fltMinimum = -3.4E38F;
    fltMaximum = 3.4E38F;

    // Print min/max values for float
    System.out.print( "float Data Type------------------------------------------------\n" );
    System.out.print( "\tMinimum: " + fltMinimum + "\n" );
    System.out.print( "\tMaximum: " + fltMaximum + "\n" );
    System.out.print( "\n" );       // Blank line

    // Confirm by subtracting and adding one to int (integer)
    fltMinimum -= 1.0E0F;
    fltMaximum += 1.0E0F;
    System.out.print( "float Confirmation\n" );
    System.out.print( "\tMinimum: " + fltMinimum + "\n" );
    System.out.print( "\tMaximum: " + fltMaximum + "\n" );
    System.out.print( "\n" );       // Blank line
    }
}

我试图让Float变量溢出但是我没有得到那个结果,上面你可以看到我尝试导入一些库来查看是否会导致它发生,但最后它只打印相同的数字在我添加1之前和之后。

2 个答案:

答案 0 :(得分:5)

对于足够大的float s,添加1将不会执行任何操作:它们非常大,以至于它们会回归到原始值。

要理解这一点,假设您存储的精度为5位小数的十进制值,并且您有1000000.如果您添加1,您获得1000001,但由于您只有五位数的精度,它会回到1000000。

你必须添加更大的东西。

你可以做的是测试Math.nextUp(Float.MAX_VALUE) == Float.POSITIVE_INFINITY,我怀疑你想要说服自己。

答案 1 :(得分:0)

尝试将strictfp添加到您班级的参数

public strictfp class CFloatExample { //...

strictfp使该类始终使用floatdouble的固定小数点。有关详细信息,请阅读http://en.wikipedia.org/wiki/Strictfp