2012-02-10 60 views
0

我正在研究iPhone應用程序的算法,其中需要保存在內存中的數據超過了限制,因此可以將浮點數的數目表示爲一個浮點值,並在需要時檢索這些值。是否可以將浮點數值合併爲一個浮點值並在需要時提取值?

例如:

 
float array[4]; 
array[0]=0.12324; 
array[1]=0.56732; 
array[2]=0.86555; 
array[3]=0.34545; 

float combinedvalue=? 

+1

我懷疑4浮動是造成這個問題。 – Pubby 2012-02-10 08:36:26

+0

這很難做到,如果你試圖用特殊的方式對它進行編碼,你會失去一些精確度。告訴更多關於這個問題以及爲什麼你需要這麼多的記憶,也許有人知道有一個更好的方法來做到這一點。 – 2012-02-10 08:37:20

+0

花車不是你的問題。在你開始看到問題之前,你需要有數千萬的內存在這個問題上,在這一點上問題不是浮動自己,而是算法選擇導致你保持這麼多活着。 – 2012-02-10 16:08:20

回答

3

不是一般的,沒有。您不能僅在N位中存儲4N位信息。

如果您的號碼有一些模式,那麼您可能會找到一個方案。例如,如果您的所有數字都具有相似的值,那麼您可能只會以較低的精度存儲數字之間的差異。

但是,這種事情是困難的,有限的。

2

如果這些數字每個都是5位數字,則可以將它們作爲整數乘以100000.然後,每個數字需要17位,總共68位,其中(有一些位移)佔用9個字節。這有幫助,9個字節而不是16個?

請注意,算法的執行也會佔用內存!

0

你所要求的可以通過幾種不同的方式來完成。例如,在C++中,通常具有單精度浮點數(4字節)作爲可用的最小精度,但如果有其他程序包處理較小的精度浮點值,則不會感到驚訝。 因此,如果您使用的是雙精度浮點值並且精度較低,那麼您可以切換到較小的精度。

現在,這取決於你要存儲的數值範圍,你也許可以使用定點表示爲好,但你需要熟悉一點的細微差別移位和屏蔽等,但,這種方法的另一個好處是它可以讓你的程序運行得更快,因爲定點(整數)算術比浮點算法快得多。

選項的選擇取決於您需要存儲的數據以及使用較低級別的二進制算術時的舒適程度。