Zhong Yanghong created KYLIN-3306: ------------------------------------- Summary: Fix the rarely happened unit test exception of generic algorithm Key: KYLIN-3306 URL: https://issues.apache.org/jira/browse/KYLIN-3306 Project: Kylin Issue Type: Bug Reporter: Zhong Yanghong Assignee: Zhong Yanghong
There's a bug in the following code: {code} private Chromosome rouletteWheel(final List<Chromosome> chromosomes, final double totalFitness) { float rnd = (float) (GeneticAlgorithm.getRandomGenerator().nextDouble() * totalFitness); float runningScore = 0; for (Chromosome o : chromosomes) { if (rnd >= runningScore && rnd <= runningScore + o.getFitness()) { return o; } runningScore += o.getFitness(); } return null; } {code} We should use double instead of float. For example, (float) (0.9999999988948809 * 40.510999999999996) = 40.511 > 40.510999999999996 -- This message was sent by Atlassian JIRA (v7.6.3#76005)