[問題] 請問在C++中float的儲存值

看板C_and_CPP (C/C++)作者 (Oswin)時間16年前 (2010/03/13 00:23), 編輯推噓1(106)
留言7則, 5人參與, 最新討論串1/1
遇到的問題: (題意請描述清楚) 我在"C++程式設計(2/e), 張耀仁"中看到 --------------------------------------------- C++指令 在電腦內部實際的儲存值 --------------------------------------------- float a=0.1; 0.10000000149011611938... double b=0.1; 0.10000000000000005555... float c=0.01; 0.00999999977648258209... double d=0.01; 0.01000000000000000021... ---------------------------------------------- 不懂為什麼實際儲存的值會是這樣?@@" C++中 符點數的記錄方式不是儲存指數跟尾數嗎? e.g, 0.1 = 1 X 10^-1, 指數=-1, 尾數=1 float type的話 24 bits for 尾數, 8 bits for 指數 所以在我的認知中會以這樣的方式儲存起來: 000000000000000000000001 11111111 (尾數=1) (指數=-1) 如果是這樣的話 電腦不是可以很精確的知道是0.1嗎? 為什麼會有上表中的誤差呢?@@" 問題很爛的話請原諒我是個初學者 麻煩高手指點了 感恩^^" -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.167.135.1 ※ 編輯: cloudlim 來自: 118.167.135.1 (03/13 00:25)

03/13 00:30, , 1F
要先轉換成"二進位科學記號"才能知道怎麼存, 請參考
03/13 00:30, 1F

03/13 00:30, , 2F
IEEE 754
03/13 00:30, 2F

03/13 00:40, , 3F

03/13 00:44, , 4F
多謝囉~洗完澡再來慢慢看 XD"
03/13 00:44, 4F

03/13 03:18, , 5F
哈..所謂的 指數 和 尾數 都是以二進制為基礎,
03/13 03:18, 5F

03/13 03:18, , 6F
你文章所舉的例都是以十進制為基礎,所以看不出來誤差
03/13 03:18, 6F

03/13 06:57, , 7F
z-8-11 可能會有幫助
03/13 06:57, 7F
文章代碼(AID): #1BccfgkN (C_and_CPP)
文章代碼(AID): #1BccfgkN (C_and_CPP)