2011-03-17 2 views
0

이 표현식이 0이되지 않도록하려면 어떻게해야합니까?Math.pow가 올바른 값을 반환하도록 하시겠습니까?

 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

baseFitness 및 x.shortfitness의 데이터 유형은 무엇입니까? – zebediah49

+0

@ ErnestFriedman-Hill @SteveKuo, 둘 다 감사합니다. 두 값만 사용하도록 expresion을 업데이트했지만 여전히 0이됩니다. 캐스트를 오래 만들려면 어떻게해야합니까? – wbarksdale

+0

아마도 실제 답변은 1 미만이므로 0으로 잘립니다. 답변을 배정에 할당하고 장부에 배정하기 전에 출력하여 값이 무엇인지 확인할 수 있습니다. –

답변

1

baseFitness은 정수입니까? 그렇다면 baseFitness/8은 정수 나누기를 수행합니다. 예를 들어 7/8이면 0이됩니다. 81008d100d으로 변경하여 강제로 부동 소수점을 나누십시오.

1

산술 표현식의 피연산자가 모두 정수 유형 인 경우 결과도 동일합니다. 예를 들어 "baseFitness"가 8보다 작은 정수인 경우 baseFitness/8은 0이됩니다. 대신에 "8.0"과 "100.0"을 사용하십시오.

관련 문제