gpt4 book ai didi

java - 如何以最小增量改变 double

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:30:11 24 4
gpt4 key购买 nike

是什么东西坏了还是我不明白发生了什么?

static String getRealBinary(double val) {
long tmp = Double.doubleToLongBits(val);
StringBuilder sb = new StringBuilder();

for (long n = 64; --n > 0; tmp >>= 1)
if ((tmp & 1) == 0)
sb.insert(0, ('0'));
else
sb.insert(0, ('1'));

sb.insert(0, '[').insert(2, "] [").insert(16, "] [").append(']');
return sb.toString();
}

public static void main(String[] argv) {
for (int j = 3; --j >= 0;) {
double d = j;
for (int i = 3; --i >= 0;) {
d += Double.MIN_VALUE;
System.out.println(d +getRealBinary(d));
}
}
}

输出:

2.0[1] [00000000000] [000000000000000000000000000000000000000000000000000]
2.0[1] [00000000000] [000000000000000000000000000000000000000000000000000]
2.0[1] [00000000000] [000000000000000000000000000000000000000000000000000]
1.0[0] [11111111110] [000000000000000000000000000000000000000000000000000]
1.0[0] [11111111110] [000000000000000000000000000000000000000000000000000]
1.0[0] [11111111110] [000000000000000000000000000000000000000000000000000]
4.9E-324[0] [00000000000] [000000000000000000000000000000000000000000000000001]
1.0E-323[0] [00000000000] [000000000000000000000000000000000000000000000000010]
1.5E-323[0] [00000000000] [000000000000000000000000000000000000000000000000011]

最佳答案

一般的想法是首先将 double 转换为它的 long 表示(使用 doubleToLongBits,就像您在 getRealBinary 中所做的那样),将 long 递增 1,最后转换new long 回到它通过 longBitsToDouble 表示的 double。

编辑:Java(自 1.5 起)提供了 Math.ulp(double),我猜您可以使用它直接计算下一个更高的值:x + Math.ulp (x).

关于java - 如何以最小增量改变 double,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3900440/

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