假設我在[0,1]範圍內有一個浮點數,我想量化並將其存儲在一個無符號字節中。聽起來像一個沒有腦子,但實際上它是相當複雜:將浮點範圍轉換/量化到整數範圍
顯而易見的解決方案是這樣的:
unsigned char QuantizeFloat(float a)
{
return (unsigned char)(a * 255.0f);
}
這工作在迄今爲止,我得到的所有號碼從0到255,但分佈的整數是不均勻的。如果a正好是1.0f
,該函數僅返回255
。不是一個好的解決方案
如果我做適當的四捨五入我只是轉移了問題:
unsigned char QuantizeFloat(float a)
{
return (unsigned char)(a * 255.0f + 0.5f);
}
在這裏,結果0
只覆蓋了浮動範圍比其他任何數量的一半。
我該如何做一個量化與平均分佈的浮點範圍?理想情況下,如果我量化均勻分佈的隨機浮點數,我希望得到平均分佈的整數。
任何想法?
btw:另外我的代碼是在C這個問題是語言不可知的。對於非C人員:只要假設float
至int
轉換會截斷浮點數。因爲我們在這裏有一些困惑:我需要一個映射,將最小的輸入float(0)映射到最小的unsigned char,並將我的範圍(1.0f)的最高浮點映射到最高的無符號字節(255)。
哇 - 是的,就是這麼簡單! – 2009-03-01 16:15:50