Java中的溢出浮动

Ada*_*der 1 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
    }
}
Run Code Online (Sandbox Code Playgroud)

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

Lou*_*man 5

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

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

你必须添加更大的东西.

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