【问题标题】:Correct Way to Obtain The Most Negative Double获得最负双倍的正确方法
【发布时间】:2010-03-05 20:03:33
【问题描述】:

这是在 Java 中获取最负双精度的正确方法吗?

double v = -Double.MAX_VALUE;

【问题讨论】:

    标签: java


    【解决方案1】:

    假设您的意思是最大的负数、非无限数,听起来是正确的,因为对于 64-bit IEEE 754 floating point 中的浮点数(这就是 Java uses for doubles):

    • 数字的大小存储在二进制rep的一部分中
    • 数字的符号存储在二进制表示的单独部分中

    因此: 最大可表示负数将与最大可表示正数相同,但符号位翻转以指示负数。

    【讨论】:

    • 那么为什么 (-Double.MAX_VALUE - 1) 不等于负无穷大呢?
    • 对不起,我的心思是整数……正如所指出的,浮点数不使用二进制的恭维。
    • case char 怎么样?最大正字符为 127,但最大负字符为 -128,而不是 -127。这是双倍的特例吗?
    • 这是 float 和 double 的特例,这些类型在后台使用 IEEE 浮点表示。各种整数类型(其中字节可以被认为是一种)使用 2s 补码。我相信它们都有一个“MIN_VALUE”字段,您可以使用它们来获取它们的最大负值。
    • @DeanJ:因为它们是花车。当你从 Double.MAX_VALUE 中减去 1 时,它首先被转换为 MAX_VALUE 的指数,这需要四舍五入,在这种情况下,减数为 0。
    【解决方案2】:

    不,它是 Double.NEGATIVE_INFINITY。

    【讨论】:

    • RHSeegar 的评论怎么样?
    • 它是有效的双精度数吗?是的,它是一个定义明确的 IEEE 754 双精度值。 Double.NEGATIVE_INFINITY 小于 -Double.MAX_VALUE,并且根据定义
    • 有两种可能的方式来解释“最负双倍”。一个是负无穷大......最大可能的两倍。第二个是最大可能的可表示双精度数,这是我的帖子所描述的。
    • 这是一个切线但很有趣的问题——你为什么不认为负无穷大是可表示的?肯定有这样的双重。
    • @RHSeeger,我同意是否会使用术语“数字”而不是“双”。但是由于无穷大是“双”包含的值之一,并且原始问题要求双倍,所以一切都可以;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-01
    相关资源
    最近更新 更多