--- tags: CS50 --- # CS50 x 2021 week 1 延伸資訊 ## Memory, imprecision, and overflow ### Floating Point Imprecision ```javascript 0.1 + 0.2 === 0.3 // false ``` 這個是大部分程式語言都會遇到的事情,因為就算是小數,最後也是轉換為二進位做運算。 電腦使用的浮點數都是遵循 [IEEE 754](https://zh.wikipedia.org/wiki/IEEE_754) 標準 算是電腦的先天缺陷,沒辦法直接解決,以下列出幾種看過的 workaround: 1. 使用乘法轉換為整數後再計算,計算完再轉換回來 2. 其他語言特定的方法(以下用 JS 舉例) 1. 使用 toFixed 方法,或是 toPrecision 方法 2. 使用 math.js 套件 ### Overflow 就算 C 語言的 long long 可以儲存到 9,223,372,036,854,775,807,但是能儲存的量還是有限,因此不能完全保證不會有溢位的情形發生。 為了因應這個情況做的數字運算稱為**大數運算**。