Java 6 - 创建并检测Float.MAX_VALUE之上的第一个Double值

时间:2012-09-10 17:39:45

标签: java floating-point double

我想创建Double,其值最接近,但大于Float.MAX_VALUE

我刚刚写了一个与此类似的问题,但对于DoubleLong.MAX_VALUE,请参阅here

如何使用标准Java 6 API重复DoubleFloat.MAX_VALUE的转换?

我的尝试如下,但似乎不正确:

Long longValue = Long.valueOf(Float.floatToIntBits(Float.MAX_VALUE));
Double value = Double.longBitsToDouble(Double.doubleToLongBits(longValue)+1);

if (value < -Float.MAX_VALUE || value > Float.MAX_VALUE) {
    // Code here should execute but does not.
}

真诚的谢谢。

2 个答案:

答案 0 :(得分:5)

Double val = (double)Float.MAX_VALUE;
val += Math.ulp(val);

这也可能有效(纠正你的例子),但不完全确定:

Double val = Double.longBitsToDouble(Double.doubleToLongBits(Float.MAX_VALUE)+1);

答案 1 :(得分:3)

Math.nextUp((double) Float.MAX_VALUE);

它不仅仅相当于最有效的解决方案,而且......它使你应该期待的结果非常明显。