Java中浮点数的最大值?

Posted

技术标签:

【中文标题】Java中浮点数的最大值?【英文标题】:Maximum value for Float in Java? 【发布时间】:2011-10-27 15:20:39 【问题描述】:

下面的question表示Double的最小值是-Double.MAX_VALUE。 Float 也是如此(即-Float.MAX_VALUE)吗?

【问题讨论】:

你的意思是 -Float.MAX_VALUE 吗? 为什么this 不是真的? @CoolBeans 阅读了他的链接问题;他说的是“最大量级的负数”。 @dlev 是的,我指的是“最大量级的负数” 【参考方案1】:

是的,-Float.MAX_VALUE 是最大量级的负数。 floats 的表示方式与 doubles 相同,只是存储空间减少了一半(以及随之而来的精度损失。)由于 IEEE 754 中的符号由单个位表示,翻转该位不会改变其余位可达到的总体幅度。

【讨论】:

【参考方案2】:

是的 - 它与 Float.MAX_VALUE 的位模式相同,只是符号位被翻转...这是获取值的另一种方法:

public class Test 
    public static void main(String[] args) 
        // Float.MAX_VALUE is intBitsToFloat(0x7f7fffff)
        // so we set the most significant bit - the sign bit
        float f = Float.intBitsToFloat((int) 0xff7fffff);
        System.out.println(f == -Float.MAX_VALUE); // true
    

【讨论】:

【参考方案3】:

编辑:我原来的答案似乎很不正确。感谢@aioobe 指出这一点。

而是用java代码的魔力来回答题主问题:

System.out.printf( "Float.MAX_VALUE: %,f\n", Float.MAX_VALUE );

Float.MAX_VALUE:340,282,346,638,528,860,000,000,000,000,000,000,000.000000

System.out.printf("in scientific notation: %.18g\n", Float.MAX_VALUE );

科学计数法:3.40282346638528860e+38

System.out.printf(
            "in hexadecimal floating-point number with a significand and "
            + "an exponent: %a", Float.MAX_VALUE );

带有有效数和指数的十六进制浮点数:0x1.ffffffep127

【讨论】:

【参考方案4】:

是的,Float 也是如此。

欲了解更多信息,请查看此处的手册http://download.oracle.com/javase/7/docs/api/java/lang/Float.html

【讨论】:

【参考方案5】:

是的,并且出于与您链接的问题的答案中所述完全相同的原因,浮点数和双精度数使用 IEEE754 表示,由于它们的存储方式,它是“对称的”。

【讨论】:

以上是关于Java中浮点数的最大值?的主要内容,如果未能解决你的问题,请参考以下文章

python中浮点数的处理

Java 中浮点数---------BigDecimal和double(初探)

shell中浮点数运算

DSP中浮点数和定点数 dsp

核心 OCaml 中浮点数的绝对值

MODBUS RTU协议中浮点数是如何存储,读到浮点数寄存器的数值如何转换成所需的浮点数