gpt4 book ai didi

java - java中的双序列化和长序列化

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

我可以在 HBase 中将数字存储为 Long 和 Double。它们在 Java 中都占用 8 个字节。

使用 Double 的优点是它可以提供更广泛的整数存储范围。

但是,我认为 Long 的范围也足够我使用了。

有没有人知道Long vs Dobule的序列化和反序列化性能?我对它们之间的比较很感兴趣。

谢谢。

最佳答案

如果要存储整数,请使用 Long。您关于“使用 Double 的优势在于它提供更广泛的整数存储范围” 的说法是不正确的。两者都是 64 位长,但是 double 必须使用一些位来表示指数,留下更少的位来表示幅度。您可以在 double 中存储更大的数字,但会失去精度。

换句话说,对于大于某个上限的数字,您不能再存储相邻的“整数”...给定一个高于此阈值的整数值,“下一个”可能的 double 将是比前一个数字大 1 以上。

例如

public class Test1  
{

public static void main(String[] args) throws Exception
{
long long1 = Long.MAX_VALUE - 100L;
double dbl1 = long1;
long long2 = long1+1;
double dbl2 = dbl1+1;
double dbl3 = dbl2+Math.ulp(dbl2);

System.out.printf("%d %d\n%f %f %f", long1, long2, dbl1, dbl2, dbl3);
}

}

这个输出:

9223372036854775707 9223372036854775708
9223372036854776000.000000 9223372036854776000.000000 9223372036854778000.000000

注意

  1. Long.MAX_VALUE-100 的双重表示等于原始值
  2. 将 1 加到 Long.MAX_VALUE-100 的 double 表示无效
  3. 在这个量级,一个 double 值与下一个可能的 double 值之间的差值为 2000。

另一种说法是 long 的精度不到 19 位,而 double 的精度只有 16 位。 Double 可以存储大于 16 位的数字,但代价是低位数字被截断/舍入。

如果您需要超过 19 位的精度,您必须求助于 BigInteger,这会降低性能。

关于java - java中的双序列化和长序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12699040/

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