[問題] atof()長度是否會有限制

看板C_and_CPP (C/C++)作者 (JIM)時間10年前 (2015/06/15 20:23), 編輯推噓2(2013)
留言15則, 6人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) VS10,C++ 問題(Question): prdict(InputArray _src, int &minClass, double &douDist) const { ... char labelchar[70]="3387226516975675659530"; douDist=atof(labelchar); printf("douDist=%f\n",douDist); } 其輸出的結果竟然是"3387226516975675500000.000000" ¯¯ 請問我是遺漏了什麼基本觀念嗎~ 為什麼到第17位的時候會發生錯誤~ 謝謝回答唷 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.123.112.60 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1434371033.A.124.html

06/15 20:27, , 1F
這其實讓我有點驚訝,精確度到17其實是double而非float
06/15 20:27, 1F

06/15 20:27, , 2F
所以atof其實會回傳...double?
06/15 20:27, 2F

06/15 20:28, , 3F
其實double的有效精確位數是16 你17對應該是湊巧
06/15 20:28, 3F

06/15 20:28, , 4F
...誒,atof還真的是回傳double...我一直以為是float
06/15 20:28, 4F

06/15 20:28, , 5F

06/16 04:32, , 6F
IEEE754對 2^-mantisa長度 取log
06/16 04:32, 6F

06/16 04:37, , 7F
可以大約估計有效位數
06/16 04:37, 7F

06/16 04:37, , 8F
另外你也可以把double的二進位內容印出來看
06/16 04:37, 8F

06/16 09:40, , 9F
double. 不是應該是%lf ?????
06/16 09:40, 9F

06/16 09:50, , 10F
不是, 請左轉 scanf
06/16 09:50, 10F

06/16 11:24, , 11F
其實atof這命名比較令人驚訝 為什麼是回傳double orz..
06/16 11:24, 11F

06/16 11:24, , 12F
另外float有效位數約7位 double約16位
06/16 11:24, 12F

06/16 12:30, , 13F
atof : ascii string to floating number
06/16 12:30, 13F

06/16 12:31, , 14F
這和windows下的Wow64有異曲同工之妙
06/16 12:31, 14F

06/17 16:38, , 15F
謝謝各位的解答,看來double的確只能到16~
06/17 16:38, 15F
文章代碼(AID): #1LViFP4a (C_and_CPP)
文章代碼(AID): #1LViFP4a (C_and_CPP)