執行人: NeedToDebugMyLife
jserv說好的進度呢?
Denny0097圖片顯示錯誤,可能是權限問題。
ginsengAttack幾何平均是否可以用2項式定理實作。
說明定點數是指用固定整數位數表達分數的格式,考慮一個 32 bits 的數,如果使用 Q16.16 格式,就代表這個數的前 16 位元用於表示整數部分,後 16 位元用於表示小數部分
例如:
| 十進位 | 二進位 | 定點數(Q16.16) | 
|---|---|---|
| 1.5 | 0000000000000001 1000000000000000 | 
加法 減法和整數加減法相同
乘法考慮 2 浮點數 、,分別對應 Q16.16 定點數 、。
兩定點數可表示為
兩定點數相乘後得到
但將兩浮點數相乘後再表示為定點數卻會得到
所以還需要再將  的結果除以  (右移 16 位元) 才會得到正確的乘法運算結果,即
除法和 乘法 類似
兩定點數相除後得到
但將兩浮點數相除後再表示為定點數卻會得到
所以還需要再將  的結果乘以  (左移 16 位元) 才會得到正確的乘法運算結果,即
牛頓法迭代公式:
考慮求
可以將原題目轉換為求  的根 (因為  為函式  的解)後得到:
接著將  和  代入到迭代公式
得到:
輸入是 IEEE float (單精度),輸出是 int 型態 (採用 LP64 data model)
針對上述情境,皆不可使用 FPU,只能藉由定點數予以計算,務必降低誤差並比較 glibc 的效能表現,提出改進方案
浮點數結構:
由於要求根號,所以只考慮 f 為正的情況 (即 S=0)
(負數以例外狀況處理)
開平方後得到
如果  是偶數,即 ,則 
如果  是奇數,即 ,則 
可以發現只需要計算出 ,就可以快速得到
在計算前,我們還需要先得到浮點數的  和 
E : 為第 23 位元到第 30 位元,所以需要右移 23 位,並且保留需要的 8 位。因為是讀出操作,所以需要再減去 127M : 為第 0 位元到第 22 位元,不需要做任何移位操作,但仍需要保留需要的 23 位因為浮點數不能直接做位移運算,所以需要使用 union 將浮點數的 32 位元表示讀取到一個 uint32_t 中
使用 u.i 求出  和  (需要額外補上整數部分的 1)
因為只能使用定點數做運算,所以計算 前還需要將 轉換成定點數表示。但因為 為 Q1.23,所以使用 Q32.32 格式來表示會比較適當 (即 32 位元為整數部分,後 32 位元為小數部分)。
前面提到,
如果  是偶數,
如果  是奇數,
所以計算 前還要檢查 是否為奇數。
使用牛頓法計算 
最後使用  和  計算出 ,並強制轉型為 int
因為回傳的值為 int,所以只需要保留前 32 位元
整理後得到
回傳結果並強制轉型為 int
輸入是 IEEE float,輸出也是 float 型態
針對上述情境,皆不可使用 FPU,只能藉由定點數予以計算,務必降低誤差並比較 glibc 的效能表現,提出改進方案
執行流程和情境1大致相同,差別在於最後要將 result 存為 float 而不是 int。
在得到計算結果 (sqrt_M_fixed) 後,需要從結果重新提取新的  和 
M_new : 因為原本提取出的 M 是一個落在  區間的數,所以開根號後的值 (sqrt_M_fixed) 也必定落在  區間,滿足符點數 mantissa 的規範,因此可以直接將開根號結果的小數部分做為浮點數的 mantissa (需要對齊),對齊部分為  個位元。
對齊後去除多餘的整數部分 (1)
E_new : 前面提到, 是一個落在  區間的數,以 1.OOO 來表示,再代回原算式:
可以發現這就是一個浮點數表示法,所以浮點數的 exponent 就等於  (E >> 1)。但因為是寫入操作,所以要再加上 127
串接 E_new 和 M_new
回傳 result.f
輸入和輸出都是 double (倍精度) 型態
針對上述情境,皆不可使用 FPU,只能藉由定點數予以計算,務必降低誤差並比較 glibc 的效能表現,提出改進方案
說明幾何平均數 (Geometric Mean):
計算的方法很簡單,但問題也很明顯。
要解決溢位的問題,可以將原本幾何平均數的公式取個對數
即:
這樣就能將原本的連乘運算轉成連加運算。
但因為要求的值是 ,不是 ,所以還要再做個指數運算
才能得出原本的 
給定若干 int 型態的資料,在 O(1) 空間複雜度的前提,計算幾何平均,要考慮到 overflow,並探討限制和改進方案
改為 float 型態,其餘同情境 1
針對上述情境,皆不可使用 FPU,只能藉由定點數予以計算,務必降低誤差並比較 glibc 的效能表現,提出改進方案
務必降低誤差並持續提出改進方案
搭配課程教材,理解開平方根和幾何平均和 FFT 如何應用於 Linux 核心,予以探討其實作手法