[筆記]浮點數(Floating Point)整理

更新於 發佈於 閱讀時間約 3 分鐘

何謂浮點數?

在了解浮點數之前,可以先大概了解一下跟他相對應的定點數

定點數:

小數點固定,整個數字表示為 整數 + 小數

今天要表示 25.125

那定點數表示法就是 25 125,中間再以小數點作為連接

浮點數:

小數點是漂浮不定的,整個數字表示分為 有效數字跟指數,類似於科學記號表示法

今天要表示 25.125

那浮點數表示法就是 2.5125 * 10^-1

為何需要浮點數?

今天若需要儲存那些很大的數字或很小的數字的時候,為了要讓精度提高,我們會需要大量的記憶體去儲存那些數字

像是 150000000 和 0.00000015

若是以浮點數表示就是 1.5*10^7 和 1.5 * 10^-7

電腦只需要儲存 1.5 有效位數跟 7 指數這兩個數字,這樣節省大量記憶體,也讓我們能夠操作很大或是很小的數字

若以圓周率來說

3.14159265359

若要很精確儲存圓周率,需要極大的記憶體才能儲存,儲存越多的位數,代表越精準

在記憶體有限的狀況下,我們會使用約略值去表示,像是 3.14

所以浮點數讓我們能儲存很大或很小的數字,但它本身可能只是一個約略值

最令人困惑的問題 0.1 + 0.2 ≠ 0.3

之所以 0.1 + 0.2 ≠ 0.3 是因為我們電腦用二進位浮點數去表示這些數字,然而 1/10 跟 2/10 並不是二進位可以明確表示出來的,導致他最終會以約略值去呈現

0.1 → 0.0011001100110011......

0.2 → 0.001100110011....

後面...為受限於有效位數約為 23 位數(單精度)的情況下,後面的會被省略掉

結果就是兩個相加後不會直接等於 0.3

那要怎麼解決這種小數點精算的問題?

在處理像是匯率或是跟錢相關的問題時,我們可以先將有小數點的數字乘於一定的倍數讓其沒有小數點,運算後再將其除回去即可,或是改成十進位制

結論

  1. 浮點數是類似於科學記號的表示法
  2. 浮點數解決了儲存很巨量或很小的數字佔太多記憶體問題
  3. 浮點數本身可能只是一個約略值,在做精確的小數點計算可能會有非預期的結果
  4. 太大的數字浮點數也有可能會造成溢位
留言
avatar-img
留言分享你的想法!
avatar-img
ken yu的沙龍
1會員
42內容數
123
你可能也想看
Thumbnail
「欸!這是在哪裡買的?求連結 🥺」 誰叫你太有品味,一發就讓大家跟著剁手手? 讓你回購再回購的生活好物,是時候該介紹出場了吧! 「開箱你的美好生活」現正召喚各路好物的開箱使者 🤩
Thumbnail
「欸!這是在哪裡買的?求連結 🥺」 誰叫你太有品味,一發就讓大家跟著剁手手? 讓你回購再回購的生活好物,是時候該介紹出場了吧! 「開箱你的美好生活」現正召喚各路好物的開箱使者 🤩
Thumbnail
介紹朋友新開的蝦皮選物店『10樓2選物店』,並分享方格子與蝦皮合作的分潤計畫,註冊流程簡單,0成本、無綁約,推薦給想增加收入的讀者。
Thumbnail
介紹朋友新開的蝦皮選物店『10樓2選物店』,並分享方格子與蝦皮合作的分潤計畫,註冊流程簡單,0成本、無綁約,推薦給想增加收入的讀者。
Thumbnail
根據PHP官方說明,浮點數的精度有限。儘管取決於系統,PHP 通常使用 IEEE 754 雙精度格式,則由於取整而導致的最大相對誤差為 1.11e-16。非基本數學運算可能會給出更大誤差,並且要考慮到進行複合運算時的誤差傳遞。
Thumbnail
根據PHP官方說明,浮點數的精度有限。儘管取決於系統,PHP 通常使用 IEEE 754 雙精度格式,則由於取整而導致的最大相對誤差為 1.11e-16。非基本數學運算可能會給出更大誤差,並且要考慮到進行複合運算時的誤差傳遞。
Thumbnail
前言 這是紀錄本人學習Unity C#時的筆記,希望讓自己能夠整理思緒,方便記憶。 因為是新手自學的關係,也很有可能有誤解或錯誤的地方,請見諒… 變數 宣告變數不能使用數字開頭,或是除了_之外的符號。 ·整數 int ·浮點數 float、double float 精度低、佔的資源較少,double
Thumbnail
前言 這是紀錄本人學習Unity C#時的筆記,希望讓自己能夠整理思緒,方便記憶。 因為是新手自學的關係,也很有可能有誤解或錯誤的地方,請見諒… 變數 宣告變數不能使用數字開頭,或是除了_之外的符號。 ·整數 int ·浮點數 float、double float 精度低、佔的資源較少,double
Thumbnail
一、自動轉型-二、明確轉型-三、Parse方法-補充、日期時間的轉換>>> 當我們在撰寫程式過程中,有可能會遇到在做資料處理時與一開始宣告的資料型別不一樣,這時就會需要資料型別轉換了。那這邊有四種轉換介紹: 一、自動轉型 運算過程中在精確度不會改變時,程式就會自動幫我們做轉型處理,什麼意思呢?就是
Thumbnail
一、自動轉型-二、明確轉型-三、Parse方法-補充、日期時間的轉換>>> 當我們在撰寫程式過程中,有可能會遇到在做資料處理時與一開始宣告的資料型別不一樣,這時就會需要資料型別轉換了。那這邊有四種轉換介紹: 一、自動轉型 運算過程中在精確度不會改變時,程式就會自動幫我們做轉型處理,什麼意思呢?就是
Thumbnail
分類 △單精度浮點數、單精度浮點值(float) △雙精度浮點數、雙精度浮點值(double) △長雙精度浮點數、長雙精度浮點值(long double) 有效位數是什麼? 儲存形式 不精確的原因 範圍與有效位數的差別 浮點數不被建議使用的原因 精確問題 速度問題 結論
Thumbnail
分類 △單精度浮點數、單精度浮點值(float) △雙精度浮點數、雙精度浮點值(double) △長雙精度浮點數、長雙精度浮點值(long double) 有效位數是什麼? 儲存形式 不精確的原因 範圍與有效位數的差別 浮點數不被建議使用的原因 精確問題 速度問題 結論
Thumbnail
說明 重點 △定義變數 △文字的定義 △文字與數字的差別 △整數與浮點數 △signed(有號)與unsigned(無號)的區別 △e是什麼符號? 分類 △字元 △字串 △短整數 △整數 △長整數 △超長整數 △單精度浮點數 △雙精度浮點數 △長雙精度浮點數 應用 宣告與輸出 運算符 結論
Thumbnail
說明 重點 △定義變數 △文字的定義 △文字與數字的差別 △整數與浮點數 △signed(有號)與unsigned(無號)的區別 △e是什麼符號? 分類 △字元 △字串 △短整數 △整數 △長整數 △超長整數 △單精度浮點數 △雙精度浮點數 △長雙精度浮點數 應用 宣告與輸出 運算符 結論
Thumbnail
首先,我將:(某數)×(10︿其數) = (閃電符號)其數 這樣子,未來人們就不用創造新的「符號」去表示進位單位了 譬如一億,就是(1×10︿8)=(1)閃電符號(8) 十二兆就是(10×10︿16)=(10)閃電符號(16) 我認為這個發現,可能就跟「發明0」一樣重要 (→)即將(參數)代入
Thumbnail
首先,我將:(某數)×(10︿其數) = (閃電符號)其數 這樣子,未來人們就不用創造新的「符號」去表示進位單位了 譬如一億,就是(1×10︿8)=(1)閃電符號(8) 十二兆就是(10×10︿16)=(10)閃電符號(16) 我認為這個發現,可能就跟「發明0」一樣重要 (→)即將(參數)代入
Thumbnail
何謂浮點數? 在了解浮點數之前,可以先大概了解一下跟他相對應的定點數 定點數: 小數點固定,整個數字表示為 整數 + 小數 今天要表示 25.125 那定點數表示法就是 25 125,中間再以小數點作為連接 浮點數: 小數點是漂浮不定的,整個數字表示分為 有效數字跟指數,類似於科學記號表示法 今天要
Thumbnail
何謂浮點數? 在了解浮點數之前,可以先大概了解一下跟他相對應的定點數 定點數: 小數點固定,整個數字表示為 整數 + 小數 今天要表示 25.125 那定點數表示法就是 25 125,中間再以小數點作為連接 浮點數: 小數點是漂浮不定的,整個數字表示分為 有效數字跟指數,類似於科學記號表示法 今天要
Thumbnail
完整標題:decimal 與「十進位」或「十進位樣容」(十進位的) 或「十進位的律」或「小數」或「小數樣容」(小數的) 或「點下之數」或「點下之數樣容」(點下之數的) 等的轉換密碼
Thumbnail
完整標題:decimal 與「十進位」或「十進位樣容」(十進位的) 或「十進位的律」或「小數」或「小數樣容」(小數的) 或「點下之數」或「點下之數樣容」(點下之數的) 等的轉換密碼
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News