contributed by <thwuedwin
>
「你不能現在就放棄,要是現在就放棄的話,你這輩子日後遇到這種等級的困難,就只會想逃避而已。」
在看到「做飲料機」這件事時,我的第一反應是:「聽起來沒什麼難的,不就是…就好了嗎?」這種想法反映了我過去面對多數問題時的態度,也可能與我四年物理系的訓練有關。我習慣追求整體直覺的圖像,重視大方向,卻常常忽略了細節的重要性。在這學期的課程也聽到了很多看似簡單實則困難的問題,我從來沒想過高鐵精準停車很困難,或是遊戲在不同負載下排程很困難。當然,物理也並非不在意細節,僅僅是我過去偷懶造成的。這是我在這堂課很重要的收穫,我應該更關注細節。
另一點啟發是最後一段,筆者詳述了之所以能做出飲料機,是因為團隊內每個人過去的經驗,若沒有付出過去學習的成本絕對無法完成。這也是我過去經驗很缺乏的事,我在22年的人生中沒有付出多少的努力,是個腦袋沒有發育的大學生。我需要學習投入更多的時間,不能因為困難就輕易放棄。我在面對作業 kxo 受到了很大的挫折,當時我放棄了,但我現在認為我應該將它完成。
為何你宣稱閱讀後,僅列出隻字片語呢?你沒有其他收穫嗎?
抱歉我當時僅列出標題,已補上內容
為何 IEEE 754 選擇 denormal number?
在你所不知道的 C 語言: 浮點數運算中有提到 denormal number,教材解釋
「DEC 採用的方法稱為 abrupt underflow (突然式下溢位),而 Intel 的提案稱為 gradual underflow (漸進式下溢位)」
Denormal number 可以讓 0 和最小的浮點數差距不這麽大。但遲早還是會發生 abrupt underflow,只是此時的數值更小了。因為 denormal number 會使浮點數的定義更加複雜,這樣的設計帶來的效益真的值得嗎?另外,denormal number 在什麼場景會用到?
我會有這個問題是因為:當我們發現 32 位元整數會發生溢位時,我們會選擇換成 64 位元整數。當我們發現浮點數精度不足以表示時,為何不是直接選擇使用精度更高的浮點數,而是在原本的浮點數再加上額外的設計?
透過將 denormal number 的 implicit leading bit 設定為 0 可以使其達到更小的值,但 denormal number 和 normal number 之間的差距,又會使浮點數在此範圍的處理更加複雜。真的有必要為了這 的差距而付出這樣的代價嗎?
Linux 核心整數平方根為何選擇 digit-by-digit 而不是牛頓法?
digit-by-digit 的做法最大的好處的是只需要位元運算,但相對的執行時間不固定,會隨著數字變大而變大。而牛頓法的收斂速度幾乎固定且很快,缺點是需要用到除法。根據我的實作觀察,牛頓法大約五到六次就會收斂,而 digit-by-digit 迴圈的次數會輸入數字的位元數相同。老師課堂上有提到現代的處理器的除法成本有下降,如此一來會不會牛頓法是更好的選擇?
教材中有提到 python 整數除法。python 支援 arbitrary-precision integer,因此 python 的實作是基於牛頓法。
我認為我現在缺乏的知識太多,希望可以先跟老師討論我應該補什麼。