gpt4 book ai didi

java - 两次运行之间的双重计算略有变化

转载 作者:行者123 更新时间:2023-11-29 06:01:44 24 4
gpt4 key购买 nike

另一位开发人员为我提供了一种算法,该算法返回一系列包含字符串化 double 值的字符串。我正在针对这些字符串输出构建单元测试。大约 80% 的时间我运行我的单元测试,它们都通过了。其他 20% 的时间轻微变化发生在返回字符串的 double 部分。例如:

Expected: ((B,D),(C,A)); : 0.05766153477579324
Found: ((B,D),(C,A)); : 0.05766153477579325

Expected: (B,(C,(A,D))); : 0.0017518688483315935
Found (B,(C,(A,D))); : 0.001751868848331593

我知道双重计算可能不精确,但我从未听说过它们是变体。算法作者向我保证该算法是确定性的。 double 被 toStringed 的​​方式是:

    for(Tree gt: geneTrees){
double prob = probList.next();
total += prob;
result.append("\n" + gt.toString() + " : " + prob);
}

我有点不知所措,无法解释这种变化是如何可能的。有什么想法吗?

最佳答案

根据您所做的求和,我怀疑这可能是由于双加法不是完全可交换或结合的问题引起的——如果您以稍微不同的方式添加 double ,您将得到不同的舍入误差订单。

基本上,只需为您的单元测试添加一个小的 epsilon。

关于java - 两次运行之间的双重计算略有变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9877940/

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