我有大量大小不同的浮點值。出于精度目的(例如,如果我想對陣列執行算術運算),它是否有助于重新縮放 [0,1] 中的那些?如果我這樣做,我可以想到較小的值會被截斷,但另一方面,較小的值不會對絕對誤差產生太大影響。如果我對已經計算出的值的陣列進行重新縮放,我相信這只會使事情變得更糟,因為我只會引入額外的舍入誤差。另一方面,我相信如果在生成所述值時涉及縮放,我相信我可以減少錯誤。
我主要指的是,對于后續間隔中的值(即 [0,1) vs [1,2) vs [2,4) 等],連續誤差之間的絕對距離增長了 2 倍。我是否在當前背景關系中正確解釋了這一點?在嘗試渲染大規模縮放的 3D 場景與較小縮放版本時,由于大縮放,我已經看到了浮點錯誤的這種影響(當 3D 空間中的相機離原點太遠時,會發生類似的效果,因為之間的絕對距離浮動變得更大)。
考慮到上述情況,是否有一種最佳方法可以為我計劃生成的一組值選擇縮放因子(前提是我知道沒有縮放的最小值和最大值是多少)。我正在考慮生成它以便所有值都在 [0,1] 內,但是我擔心最小元素的截斷可能是一個問題。是否有基于最大和最小元素的已知啟發式方法,可以找到半最佳的重新縮放精度。在一個不相關的說明中,我知道 Kahan 求和演算法及其變體,并且我確實使用它來求和所述陣列。我的問題是選擇規模是否可以進一步幫助,或者這無關緊要?
uj5u.com熱心網友回復:
只要結果保持在正常指數范圍內,在二進制浮點格式中按 2 的冪(或通常按b基浮點格式中的b的冪)縮放就不會出錯。也就是說,對于任何X,計算的結果X ? b ?具有相同的有效數為X,只要 X ? b ?是在正常范圍內。
同樣,只要結果保持在正常范圍內,加、減、乘、除縮放數字的操作產生的結果與對停留在正常范圍內的未縮放數字的相同操作產生的有效數相同。未縮放操作中出現的任何舍入誤差與縮放操作中的舍入誤差相同,由比例調整。
因此,按b的冪縮放數字、執行相同的操作和撤消縮放不會改善或改變浮點舍入誤差。(請注意,乘法和除法會影響縮放,這可以在每次操作后、所有操作后或定期進行補償。例如,給定X = x*16and Y = y*16,X*Y將等于x*16*y*16= x*y*256。因此撤消其縮放需要除以 256 而不是16.)
如果使用其他操作,舍入誤差可能不同。例如,如果執行平方根并且其運算元中的縮放不是b的偶次冪,則其結果將包括不是b的整數冪的縮放,因此有效數必須不同于相應的未縮放結果,這允許舍入誤差不同。
當然,如果在縮放的數字上使用正弦、余弦或其他三角函式,將獲得截然不同的結果,因為這些函式不會以所需的方式縮放(f( x ? s ) 通常不等于 f( x ) ? s )。但是,如果被縮放的數字代表空間中的點,則它們之間計算的任何角度在縮放和未縮放的實作中都是相同的。也就是說,計算的角度將沒有縮放,因此應用三角函式會產生相同的結果。
如果任何中間結果在縮放或非縮放計算中超出正常指數范圍,則可能產生不同的有效數。這包括結果低于正常但未下溢到零的情況 - 低于正常結果可能截斷了有效數,因此與產生正常范圍結果的不同縮放計算相比,某些資訊會丟失。
縮放的替代方法可能是平移。當處理來自原點的點時,坐標可能很大,并且相對于點之間的距離,浮點解析度可能很大。如果將點平移到原點附近(從每個坐標中減去固定量[按維度固定]),則保留它們之間的幾何關系,但坐標將在更精細的浮點格式范圍內。這可以改善出現的浮點舍入錯誤。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/343371.html
上一篇:如何重新采樣音頻?
