private int randomPreviousState( DuoBaumLevel level, int nodeAB1, int nodeA2, int nodeB2, double nodeValue) { double d = random.nextDouble() * nodeValue; double sum = 0.0; for (int j = 0, n = level.size(); j < n; ++j) { if (nodeAB1 == level.childNodeAB1(j) && nodeA2 == level.childNodeA2(j) && nodeB2 == level.childNodeB2(j)) { sum += level.forwardValue(j); if (d <= sum) { return j; } } } return level.size() - 1; // error in finite bit arithmetic encountered }