[英]Overflow float in Java
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。
對於足夠大的float
,加1
不會做任何事情:它們太大,以致於四舍五入到原始值。
為了理解這一點,假設您存儲的十進制值的精度為5個十進制數字,並且您有1000000。如果加1,您將獲得1000001,但是由於您只有5位數的精度,因此四舍五入為1000000。 。
您必須添加更大的東西。
您可以做的是測試Math.nextUp(Float.MAX_VALUE) == Float.POSITIVE_INFINITY
,我懷疑這是您要說服自己的。
嘗試在您的類的參數中添加strictfp
tp
public strictfp class CFloatExample { //...
strictfp
使該類始終對float
和double
使用固定的小數點。 有關更多信息,請閱讀http://en.wikipedia.org/wiki/Strictfp
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.