让Math.pow返回正确的值?

时间:2011-03-17 04:45:08

标签: java double long-integer primitive-types

如何才能使这个表达式最终成为零。

        double dBaseFitness = (double) baseFitness;
        x.shortfitness = (long)(Math.pow(dbaseFitness, dbaseFitness/8.0)/100.0)
                *(long)(Math.pow((double)x.genome.GSIZE, -.1)/100.0);

x.shortfitness是一个很长的值。 x.Genome.GSIZE是一个int。

我将每个表达式除以100的唯一原因是结果不超过long类型的最大值。

2 个答案:

答案 0 :(得分:1)

如果算术表达式的两个操作数都是整数类型,那么结果也是如此。因此,例如,如果“baseFitness”是小于8的整数,则baseFitness / 8将为零。改为使用“8.0”和“100.0”。

答案 1 :(得分:1)

baseFitness是整数吗?如果是,那么baseFitness/8进行整数除法。例如,7/8将产生0。将您的8100更改为8d100d以强制进行浮点划分。