Получение Math.pow, чтобы вернуть правильное значение? - PullRequest
0 голосов
/ 17 марта 2011

как я могу сделать так, чтобы это выражение не заканчивалось нулем.

        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 ]

1 голос
/ 17 марта 2011

Является ли baseFitness целым числом? Если это так, то baseFitness/8 выполняет целочисленное деление. Например, 7/8 даст 0. Измените 8 и 100 на 8d и 100d, чтобы принудительно разделить числа с плавающей точкой.

1 голос
/ 17 марта 2011

Если оба операнда арифметического выражения являются целочисленными типами, то и результат будет тоже.Так, например, если "baseFitness" является целым числом меньше 8, то baseFitness / 8 будет нулевым.Вместо этого используйте «8.0» и «100.0».

...