gpt4 book ai didi

java - 传递参数后精度损失

转载 作者:行者123 更新时间:2023-12-02 10:17:32 24 4
gpt4 key购买 nike

我有一个持有很大值(value)的多头。然后我尝试将它作为参数传递给函数,该函数采用 double 后精度就会丢失。这是为什么?我该如何避免这种情况?

long bigValue = 3038528443022066688L;
foo(bigValue);
...

foo(double value){
System.out.printlin(value);
}

实际结果:3.0385284430220667E18预期:原始值

我知道并非每个 long 都可以表示为 double,但如何保留原始值?

最佳答案

double 是浮点值。这意味着它永远不会拥有精确的值。任何浮点都有一定的精度、容差或误差。

换句话说, float 始终只是一个近似值。近似值可以像任何近似值可以一样达到精确值,但仍然是近似值。

这会产生重要的后果:你不能只用科学家的公式来喂养双倍。尝试这样做通常会导致无法使用的不可靠/错误的结果。相反,您必须找到一个考虑到它是近似值的替换公式。例如除法和根稳定,不同大小值的差异会导致错误并需要缩放......

考虑到这一点,您得到 3.0385284430220667E18 作为 3038528443022066688 的近似值 - 这是一个有效的近似值。

当你告诉Java从你的long(这是一个“离散”数字,微积分需要将其考虑在内:离散数学或Knuth称之为“具体”)创建一个double(普通:近似值)时,就发生了这种情况。

关于java - 传递参数后精度损失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54576300/

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