sysprog2020
目的: 檢驗學員對 浮點數運算, 數值系統 及 bitwise 操作 的認知
1
考慮到以下浮點數除法程式: (fdiv.c)
假設 divop()
的第二個參數必為大於 0
的整數,而且不超過 int
型態能表達的數值上界。請補完程式碼。
作答區
D1
= ?
(a)
4(b)
3(c)
2(d)
1D2
= ?
(a)
4(b)
3(c)
2(d)
1延伸問題:
gcc -S
觀察對應的組合語言輸出),並與使用到 FPU 的實作進行效能比較2
延續 從 的運算談浮點數,假設 float 為 32-bit 寬度,考慮以下符合 IEEE 754 規範的平方根程式,請補上對應數值,使其得以運作:
Reference:
請補完程式碼,使上述程式碼得以運作。
作答區
QQ0 = ?
(a)
0x01000000(b)
0x7ff00000(c)
0x00800000(d)
0x3f000000QQ1 = ?
(a)
0x01000000(b)
0x7ff00000(c)
0x00800000(d)
0x3f000000QQ2 = ?
(a)
31(b)
30(c)
28(d)
27(e)
25(f)
24(g)
23(h)
16(i)
3延伸題目:
3
LeetCode 829. Consecutive Numbers Sum 給定一個正整數 N,問 N 能寫成多少種連續正整數之和,例如 9
可寫成 ,或者 。由於要寫成連續正整數之和,則可用等差數列來思考,且差值為 1,這個等差數列不必從 1 開始,假設從 x 開始,且個數共有 k 個,則可寫出該等差數列為:
令其和為 N,根據等差數列的求和公式,可寫出以下等式:
整理後可得:
對任意 k 值,倘若 x 能得到正整數解,就表示必定會有個對應的等差數列和為 N。由於 k 是等差數列的長度,首先必定大於 0,即為下限。由於 x 也必是正整數,可得:
從而得到近似解:
確認 k 的範圍後,即可走訪數值。
參考實作如下:
請補完程式碼,使上述程式碼得以運作。
作答區
ZZZ = ?
(a)
i(b)
i + 1(c)
i - 1(d)
1 - i(e)
1延伸題目: