2011-03-17 83 views
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 2011-03-17 04:48:21

+0

@ ErnestFriedman-Hill @SteveKuo,謝謝你們,我更新了expresion只使用雙值,但我仍然得到0.我在哪裏做演員很長? – wbarksdale 2011-03-17 05:05:44

+0

也許真正的答案是小於1,所以它被截斷爲0?這將有助於將答案分配給double,並在將其分配給long之前將其打印出來,以便我們可以看到該值是什麼。 – 2011-03-17 05:12:03

回答

1

baseFitness是一個整數?如果是的話baseFitness/8做整數除法。例如7/8將產生0。將您的8100更改爲8d100d以強制進行浮點除法。

1

如果算術表達式的兩個操作數都是整型,那麼結果也是如此。因此,例如,如果「baseFitness」是一個小於8的整數,那麼baseFitness/8將爲零。改爲使用「8.0」和「100.0」。