在標準的32位IEEE 754浮點值中,數字中最高有效位與其最低有效位之間的最大比率爲2 。這是因爲浮點編碼有效位數(或分數)有24位(包括「隱含位」)。所以最高位可以是2 而最低位爲2 (1),或最高位可以是2 而最低位爲2 -11,爲例子。在你的情況下,你可能希望使用最低位的2 -1,最低位爲2 -24。你告訴我們你正在映射的範圍([0,1]),但不是你映射的範圍,所以我們不能告訴你要使用的縮放因子。
如果您使用無符號的16位數字進行映射,範圍爲[0,65536),則可以使用1/65536的縮放因子。 (在很多語言中,您會編寫1./65536
以獲得浮點常量; 1/65536
將是一個計算爲零的整數表達式。)此縮放會將所有數字映射到目標範圍,並且數字的「下方」具有可用的精度,但它不會留下任何增加數量或增加幅度的其他操作的餘量。如果你想留下更多的算術空間,同時保持結果[0,1],那麼你需要一個更大的比例(更小的比例因子)。
您應該使用兩個冪乘以縮放因子。二進制浮點乘以2的冪沒有舍入誤差。乘以10的冪或它們的逆(它們必然是近似的,因爲十的冪的倒數不能用二進制浮點精確表示)通常會導致舍入誤差。
在標準的64位IEEE浮點值中,最大比率爲2 。
你問什麼最大值16BIT_MULTIPLIER可以,但它不太可能這是你真正想要的。您可以使16BIT_MULTIPLIER儘可能大,直到數字的低位達到2 -149。此時,您將到達指數範圍的末尾(高位爲2 -126),並且具有較小值的位無法表示(以32位浮點形式)。
優秀的答案,謝謝。您能否詳細說明以下內容? **這種縮放會將所有數字都映射到目標範圍內,並且數據的「低於」數字可用精度,但不會留下任何增加數字或其他增加幅度的操作的餘量。如果您想留出更多算術空間,同時保留結果[0,1],則需要更大的比例(更小的比例因子)。** – user1423893 2012-07-16 13:20:48
如果您將[0,65536)中的數字乘以1/65536,那麼像57344和49152這樣的數字就會映射到.875和.75。如果這是最終結果傳遞給需要[0,1]中的數字的渲染器,那麼很好。但是如果你要做更多的算術運算,比如添加這些數字,你會得到超出間隔的東西,比如1.625。在這種情況下,如果您希望最終結果保持在時間間隔內,則必須根據您要執行的計算進行計劃。如果你不打算做更多的算術,那麼使用這個縮放。這些數字將有24位精度。 – 2012-07-16 13:26:33
我懂了。謝謝 :) – user1423893 2012-07-16 14:24:22