簡體   English   中英

Java中的溢出浮點

[英]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使該類始終對floatdouble使用固定的小數點。 有關更多信息,請閱讀http://en.wikipedia.org/wiki/Strictfp

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM