gpt4 book ai didi

java - 如何比较 Double.MAX_VALUE

转载 作者:行者123 更新时间:2023-12-02 00:07:15 25 4
gpt4 key购买 nike

我想检查 double 是否有 Double.MAX_VALUE

这是正确的方法吗(版本 1):

boolean hasMaxVal(double val){
return val == Double.MAX_VALUE;
}

或者我需要做这样的事情(版本 2):

boolean hasMaxVal(double val){
return Math.abs(val - Double.MAX_VALUE) < 0.00001
}

最佳答案

Java 的 double 类型是 double-precision IEEE 754 float 。这意味着尾数中有 53 位精度,因此数字的精度限制为十进制格式的大约 16 位有效数字。

Double.MAX_VALUE 约为 1.798×10308,因此第 16 位有效数字的量级约为 10308 - 16 = 10292。我们可以使用 Math.ulp 方法确认这一点,该方法返回一个 double 值的“最小精度单位”:

> Double.MAX_VALUE
1.7976931348623157E308
> Math.ulp(Double.MAX_VALUE)
1.9958403095347198E292

这意味着如果您确实想测试“接近于”Double.MAX_VALUE 的值,则只有在至少 2E292 的 epsilon 内这样做才有意义. 0.00001 的 epsilon 太小了,除了 Double.MAX_VALUE 本身之外,该范围内没有任何值,因此您的测试等同于 val == Double.MAX_VALUE.

关于java - 如何比较 Double.MAX_VALUE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60204144/

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