or
or
By clicking below, you agree to our terms of service.
New to HackMD? Sign up
Syntax | Example | Reference | |
---|---|---|---|
# Header | Header | 基本排版 | |
- Unordered List |
|
||
1. Ordered List |
|
||
- [ ] Todo List |
|
||
> Blockquote | Blockquote |
||
**Bold font** | Bold font | ||
*Italics font* | Italics font | ||
~~Strikethrough~~ | |||
19^th^ | 19th | ||
H~2~O | H2O | ||
++Inserted text++ | Inserted text | ||
==Marked text== | Marked text | ||
[link text](https:// "title") | Link | ||
 | Image | ||
`Code` | Code |
在筆記中貼入程式碼 | |
```javascript var i = 0; ``` |
|
||
:smile: | ![]() |
Emoji list | |
{%youtube youtube_id %} | Externals | ||
$L^aT_eX$ | LaTeX | ||
:::info This is a alert area. ::: |
This is a alert area. |
On a scale of 0-10, how likely is it that you would recommend HackMD to your friends, family or business associates?
Please give us some advice and help us improve HackMD.
Do you want to remove this version name and description?
Syncing
xxxxxxxxxx
2024q1 Homework5 (assessment)
contributed by <
yourui1017
>〈因為自動飲料機而延畢的那一年〉的啟發
對於這兩句話特別有感受。雖然目前已經修習過許多課程,但往往都只是把課本上的知識死背硬背,求的就只是課程的高分,雖然成績單上有好看的成績,但根本不了解學習這些課程背後的意義,在面對真實世界的考驗時,無法應用學習的知識解決當前的問題。
若想要貫通學習課程的意義必須要擁有獨立思考的能力並解決實作時遇到的困難,沒有付出犧牲是無法解決面對的問題的,只有絞盡腦汁不被問題擊敗,才能夠一步一步慢慢成長。
前陣子因為在忙於實驗室的比賽的部份,對於本課程的投入時間非常不足,根據等價交換的基本原則,付出多少時間就只能得到等價的回報。另外,在觀摩其他學員的成果時,發現學員對於整體系統的開發到微小的細節都有充分的理論與實驗佐證,在進行實驗時也會考慮到不同的資料測試結果(如:最差狀況、最佳狀況、隨機資料等等),讓我了解到想要開發完整的專案必須留意各式細節,仔細思考實驗應考慮的情況,認真對待面對的問題。
檢視前六周學習狀況
M01: lab0
list_sort
到 lab0-c ,比較自己實作的排序驗算法與list_sort
的效能差異。M02: quiz1+2
quick_sort
的運作原理,改善演算法使用到的記憶體大小與最差狀況的快速排序實作,並使用實驗佐證。minrun
的判斷,並實作插入排序保證達成minrun
,進行效能測試的實驗,最後將Timsort
引入 lab0-c 作為另一個有效的排序命令。M03: ttt
尚未開始,需要投入更多時間。
M04: quiz3+4
尚未開始,需要投入更多時間。
想投入的專案 (亦可建立新專案),至少選出 (或訂出) 二個
目前想要做的期末專案為以下:
補完前面積欠的作業高估自己網頁 0 基礎,會需要從頭學習)stackful vs. stackless
A => A1 + A2 + A3
B => B1 + B2
A1, A2, A3 -> B1, B2 -> A1, ..
A1 -> B1, B2 -> A2, A3
保存狀態: 用到 stack
使用 global
IEEE 754, assume float is 32-bit width
在做 float_mul10 之前,需要先了解浮點數的運作方式,參考自 你所不知道的 C 語言: 浮點數運算 和 浮點數運算和定點數操作 ,在 C 語言中 float 是遵照 IEEE 754 的規定進行設計的, float 存放方式分為三種:
為了使數值表達範圍更廣,才使用這種表達方式,但相對的這種方式會導致數值運算變得更加複雜,普通的四則運算就要考慮到三種不同的模式:
Denormalize 是為了解決 underflow 的問題,在 denormalize 模式下可以表達更小的數值範圍。
NaN 用以表達未定義或不可表示的情況。
誤差

浮點數表示法會隨著數值愈來愈大,誤差也愈來愈大。
精度
了解浮點數的表示法後,就可以開始實作函式 float_mul10。
IEEE 754, assume float is 32-bit width
首先,先把 float_mul10 拆解成 float_mul2 + float_mul8,這樣一來就可以針對 exponent 的部份進行左移得到 float_mul2 和 float_mul8。
至於在 float_mul2 函式中,需要先使用 unsigned 解釋浮點數的資料,並且藉由 bitwise operetion 得到 sign bit 和 exponent 。
接下來針對三種模式進行運算
最後把無號數的表示方式使用浮點數資料型態解釋並回傳。
注意:
*(float *) &uf
和(float) uf
的差別*(float *) &uf
代表使用浮點數的方式解讀 uf(float) uf
則是會把當前 uf 的資料使用 IEEE 754 的規定轉型成浮點數,導致資料會有變化結果:將自己實作的 float_mul2、float_mul8、float_mul10 和內建的浮點數乘法使用
perf
進行比較,測資個數皆為 100000 筆。自己實作的:


內建的浮點數乘法:
自己實作的:


內建的浮點數乘法:
自己實作的:


內建的浮點數乘法:
TODO: quiz10, quiz12 + extra
quiz10 開發紀錄請看:2024q1 Homework(quiz10)