Re: [問題] 請問如何 '較精確的' 轉換 float 到 do …
※ 引述《wahaha99 (此方不可長)》之銘言:
: float 在超過本身的七位有效值後面仍然有一大串無效值,
: 這點是本來就知道的, 但我發現在經過 double( ) 轉換後,
: 這些無效值會被完完整整的搬過去。
: 我現在想請教的是, 有沒有什麼方法, 可以把float搬過去的同時,
: 把這些無效值去除掉。
: 簡單來說就像是:
: float double
: 0.xxxxxxxyyyyyy => 0.xxxxxxx000000
: x是有效部分, y是無效部分
: 我想過轉換回string處理, 但c++的string實在不太快;
: 使用上也不太友善。(大概是因為我還不熟悉)
: 不知道有什麼好方法可以建議呢? 謝謝。
其實這是我們人用十進位觀點看的結果
對電腦來說 以二進位來看的結果的確是你所要的樣子
____
拿 0.6 為例 它的二進位是 0.1001
取到 24 bit 就是 0.100110011001100110011010
這值的精確十進位是 0.60000002384185791015625
將這個 float 值轉成 double 後它會完整的把這些 bit 搬過去後補零
所以那個 double 也就會是
0.10011001100110011001101000000000000000000000000000000
做個比較 如果 0.6 直接設給 double 取 53 bit 是
0.10011001100110011001100110011001100110011001100110011
它的精確十進位是 0.59999999999999997779553950749686919152736663818359375
---
回過頭來 你要的問題是想在 double 的時候把十進位的那些值切掉
但相對的對電腦 他得想辦法在二進位方面把這些差的 bit 給補上去
(你想想看在二進位方面要怎麼把上面兩個 double 的第一個變成第二個)
所以要在二進位等級把這件事解決是很難的
因此只能藉由直接操作十進位 (eg. 變成字串之後切掉) 來達成你要的效果
--
いああオレたちには見えてるモノがあるbデ きっと誰にも奪われないモノがあるはずさ
け 開口一番一虚一実跳梁跋扈形影相弔yュL羊頭狗肉東奔西走国士無双南柯之夢 歪も
ぶ 意味がないと思えるコトがある ラPきっとでも意図はそこに必ずある んの
く 依依恋恋空前絶後疾風怒濤有無相生 ラH急転直下物情騷然愚者一得相思相愛 だが
ろ 無意味じゃない ラ6あの意図が 恋た
で 有為転変死生有命蒼天已死黄天當立 !!6五里霧中解散宣言千錯万綜則天去私 のり
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.28.92
※ 編輯: LPH66 來自: 140.112.28.92 (10/24 19:43)
推
10/24 19:50, , 1F
10/24 19:50, 1F
推
10/24 19:52, , 2F
10/24 19:52, 2F
推
10/24 20:07, , 3F
10/24 20:07, 3F
推
10/24 20:24, , 4F
10/24 20:24, 4F
→
10/24 20:24, , 5F
10/24 20:24, 5F
→
10/24 20:25, , 6F
10/24 20:25, 6F
推
10/25 02:40, , 7F
10/25 02:40, 7F
→
10/25 02:40, , 8F
10/25 02:40, 8F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 3 篇):