如何才能使这个表达式最终成为零。
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类型的最大值。
答案 0 :(得分:1)
如果算术表达式的两个操作数都是整数类型,那么结果也是如此。因此,例如,如果“baseFitness”是小于8的整数,则baseFitness / 8将为零。改为使用“8.0”和“100.0”。
答案 1 :(得分:1)
baseFitness
是整数吗?如果是,那么baseFitness/8
进行整数除法。例如,7/8
将产生0
。将您的8
和100
更改为8d
和100d
以强制进行浮点划分。