2010-07-23 44 views
0

是否有可能改變在VS C++項目 用於一些其他類型的改變浮球式短但相同的行爲float類型變量

float *pointer 

類型,因此,它仍然會表現作爲浮動類型,但範圍較小? 我知道浮點值永遠不會超過該項目中的某個固定值,所以我想按照它使用的內存優化程序。對於'float *指針'的每個元素來說它不需要4個字節,我認爲2個字節就足夠了。如果我將浮點數更改爲short並模仿浮點行爲,那麼它將使用兩次較短的內存。怎麼做?

編輯:

它計算的概率。所以有喜歡 A/B 其中A < B, 並且還B(和A)可以是從1到10 000

+0

你期望結果在什麼範圍?多少個十進制數字對你很重要? – 2010-07-23 07:43:13

+0

@ DavidRodríguez - dribeas我認爲整數部分後3或4位數字 – erjik 2010-07-23 07:53:03

回答

2

在IEEE 754-2008中有一個標準的16位浮點格式,稱爲「binary16」。它被指定爲存儲精度降低的浮點值的格式。目前幾乎沒有編譯器支持(我認爲GCC在某些ARM平臺上支持它),但是很容易推出自己的例程。這傢伙:

http://blog.fpmurphy.com/2008/12/half-precision-floating-point-format_14.html

寫了一點關於它也提出了一個程序來轉換半浮點< - >浮動。

另外,這裏似乎是一個半浮點C++包裝類:

half.h: http://www.koders.com/cpp/fidABD00D95DE84C73BF0218AC621E400E07AA77B53.aspx half.cpp http://www.koders.com/cpp/fidF0DD0510FAAED03817A956D251787609BEB5989E.aspx

供給 「HalfFloat」 作爲可能的滴在替換類型。

2

也許還可以利用定點運算部門?這一切都取決於你想要達到的價值和精度。

http://www.eetimes.com/discussion/other/4024639/Fixed-point-math-in-C

對於C有大量的代碼,使定點容易,我敢肯定也有很多C++類,使其更容易,但我不知道有什麼,我更傾向於C.

+1

谷歌的第一個:http://wiki.yak.net/675 – GDR 2010-07-23 07:33:15

1

第一個顯而易見的內存優化是試圖擺脫指針。如果你只能存儲浮點數,那麼可能會根據更大的上下文將內存消耗從8字節減少到4字節。 (在64位系統上,從十二個到四個)。

是否可以短暫取決於程序對值的處理方式。你可能可以使用固定點算法,使用一個整數類型,如短,是的,但你的問題顯示太少的上下文來判斷。

0

您發佈的代碼和問題中的文本不涉及實際的float,而是指向float。在我所知的所有體系結構中,無論指針類型如何,指針的大小都是相同的,因此將其更改爲shortchar指針沒有任何改進。

現在,關於實際指出的元素,您期望在應用程序中的範圍是什麼?你需要什麼精度?你有多少元素?目標平臺的內存限制是什麼?除非範圍和精度很小,元素數量巨大,只需使用floats即可。另請注意,如果您需要浮點運算,則在每次操作之前和之後存儲任何其他類型的數據都需要進行轉換,並且可能會影響性能。

如果不知道自己在做什麼,許多體系結構中的short的範圍是[-32k, 32k),其中k代表1024。如果您的數據範圍是[-32,32),並且您可以使用大約3位小數位,則可以使用short s的定點算術,但幾乎沒有這種情況。

相關問題