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之前和之后。
答案 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
使该类始终使用float
和double
的固定小数点。有关详细信息,请阅读http://en.wikipedia.org/wiki/Strictfp