gpt4 book ai didi

java - 在 Java 中迭代集合时递增值时出现奇怪的错误

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:09:08 25 4
gpt4 key购买 nike

我最近写了一个在图上进行蚁群优化的程序。

下面的代码有一个我无法理解的错误。

    Map<Node, Edge> nodesLinkedToCurrentNode = a.getCurrentNode().getLinkedNodes();

TreeMap<Double, Node> probabilitiesForNodes = new TreeMap<>();
double totalProb = 0d;

for (Node n : graph.values()) {
if (!a.getVisited().contains(n)) {
//For each node that has not yet been visited
//calculate it's weighted probabily
double weightedProbability
= (Math.pow(nodesLinkedToCurrentNode.get(n).getPheremoneLevel(), RPI))
* (Math.pow((double) 1 / nodesLinkedToCurrentNode.get(n).getDistance(), RHI));
totalProb += weightedProbability;

//Map the node to its probability
probabilitiesForNodes.put(weightedProbability, n);
}
}

double testTotalProb = 0d;
for (Double d : probabilitiesForNodes.keySet()) {
testTotalProb += d;
}
if (testTotalProb != totalProb) { <----------How can this happen??
System.out.println("Why?");
totalProb = testTotalProb;
}

那个 if 语句一直在执行,我不明白为什么。

我只是递增一个值,但出于某种原因,它没有正确递增。

I made the project open source, if you want to check it out

The java file with the code in it

我用下面的代码复制了这个错误:

    TreeMap<Double, String> probabilitiesForNodes = new TreeMap<>();
double totalProb = 0d;

for (int i = 1; i < 10; i++) {
//For each node that has not yet been visited
//calulate it's weighted probabily
double weightedProbability
= (Math.pow(0.7 + 1 / i, 2))
* (Math.pow((double) 1 / 30, i));
totalProb += weightedProbability;

String sudoNode = "node" + i;

//Map the node to its probability
probabilitiesForNodes.put(weightedProbability, sudoNode);
}

double testTotalProb = 0d;
for (Double d : probabilitiesForNodes.keySet()) {
testTotalProb += d;
}
if (testTotalProb != totalProb) {
System.out.println("Why?");
totalProb = testTotalProb;
}

最佳答案

您正在处理 double 数字,因此您应该预料到这一点。具体来说,您通过迭代添加相同的 double 数字但以不同的顺序获得 totalProbtestTotalProb。由于添加 double 不是完全关联的操作,因此出现足够的差异会使相等性测试失败。

可能发生的另一件事是在同一个 Double 键上发生冲突。没有什么可以阻止两个节点具有完全相同的加权概率。因此对于初学者,您可以只检查两个集合的大小。

关于java - 在 Java 中迭代集合时递增值时出现奇怪的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31361680/

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