java - Java 中的溢出 float

标签 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 之前和之后。

最佳答案

对于足够大的 float,添加 1 不会做任何事情:它们太大以至于它们会四舍五入到原来的值。

为了理解这一点,假设您要存储一个精度为 5 位小数的十进制值,并且您有 1000000。如果您加 1,您得到 1000001,但由于您只有五位精度,四舍五入为 1000000。

你必须添加更大的东西。

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

关于java - Java 中的溢出 float ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27535280/

相关文章:

java - 更新代码至4.1

java - 对我来说使用 2 个小程序类更好还是有 1 个小程序类和一个普通类更好

JavaScript - 以干净的方式将字节转换为 float

c# - 浮点运算歧义

java - 小数格式舍入

java - 错误连接为空

java - 使用 Java 邮件服务器进行测试

floating-point - 是否有向量寄存器对单精度和 double 使用相同的指数位?

javascript - 为什么 Math.min() 从 [+0, 0, -0] 返回 -0

ISODateTimeFormat.dateTime() 的 javadoc