gpt4 book ai didi

java - Double.isFinite 实现细节 - 为什么是 DoubleConsts.MAX_VALUE 而不是 Double.MAX_VALUE?

转载 作者:搜寻专家 更新时间:2023-10-30 21:34:10 24 4
gpt4 key购买 nike

我查看了 Double.isFinite() 的实现从 java 8 开始就存在(因为我需要 java 7 中的功能):

public static boolean isFinite(double d) {
return Math.abs(d) <= DoubleConsts.MAX_VALUE;
}

其中 DoubleConsts.MAX_VALUEdouble sun.misc.DoubleConsts.MAX_VALUE,其值为 1.7976931348623157E308。这似乎相当于Double.MAX_VALUE,其定义为:

public static final double MAX_VALUE = 0x1.fffffffffffffP+1023; // 1.7976931348623157e+308

为什么这个实现使用 sun.misc-package 中的常量而不是 Double.MAX_VALUE ?

(Float.isFinite 使用相同的模式)

最佳答案

原因似乎主要是历史原因:

这些方法提供的功能以前位于 sun.misc.FpUtils 中。这个类不直接依赖Double,它只导入

import sun.misc.FloatConsts;
import sun.misc.DoubleConsts;

所以那里的实现更有意义 - 似乎完全一样:

public static boolean isFinite(double d) {
return Math.abs(d) <= DoubleConsts.MAX_VALUE;
}

另见 The ticket that led to moving this to Double

关于java - Double.isFinite 实现细节 - 为什么是 DoubleConsts.MAX_VALUE 而不是 Double.MAX_VALUE?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46362306/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com