2012-05-30 52 views
0

我有一個粒子(我模擬粒子系統)的生命屬性,這是一個浮點值,因爲我也使用它的透明度(alpha是浮點數)。我讀過關於將float轉換爲double的問題,並意識到這是一個相當大的問題,所以我可能無法將float轉換爲double。問題是,我想嘗試從像生活變量計算粒子的路徑:「轉換」浮點數在C#中的倍數爲

particle.x += particle.xi; 
particle.xi = Math.Sin(life); 

注:生命值一開始1.0F,降低爲0(如果< 0.0F我重新初始化粒子和將生命設置爲1.0f)。
但罪惡想要雙倍的價值......我們回到了開始。 因此,一種解決方案可以改變生命財產的類型加倍,當我使用它的透明度,我只是這個雙轉換浮動這應該不是大問題(我猜)。
但我的問題是,如果有其他方式來做到這一點,造成雙重也花費更多的內存(我不知道在這種情況下更多的手段 - 我想更多的時間,可以說我會有500粒子和每個都有這個屬性)。 我只是需要以某種方式計算這個浮動屬性的罪的價值。

那麼有可能嗎?我對記憶的擔憂很重要嗎?

回答

3

這應該工作:

particle.x += particle.xi; 
particle.xi = (float) Math.Sin(life); 

它沒有「使用更多的內存」,它只是將值轉換爲雙暫時,而它的重新計算,然後將其轉換回浮點當它去存儲值。

要進入更詳細一點:那Math.Sin需要雙,但浮動可以轉換爲無損失這個更高的精度,所以它只是「神奇工程」(一隱含投從浮翻番)。但是,爲了將返回的結果轉換爲浮點數,您將降低數字的精度,因此編譯器(不知道這是否可以接受)不會執行此操作,除非您將其強制爲(通過使用(float)這是一個顯式從雙重轉換爲浮動)。

+0

嗯,我認爲問題是我把浮點數Math.Sin,並忽略了particle.xi也是浮動的,我應該預料到兩個相同的問題,但在第一種情況下,這不是一個問題,因爲Sin接受浮動:)感謝您的解釋。它確實有幫助。哦,這個小笨蛋的錯誤... – user1097772