看板 C_and_CPP 關於我們 聯絡資訊
開發平台(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
Killercat: 這其實讓我有點驚訝,精確度到17其實是double而非float 06/15 20:27
Killercat: 所以atof其實會回傳...double? 06/15 20:27
Killercat: 其實double的有效精確位數是16 你17對應該是湊巧 06/15 20:28
Killercat: ...誒,atof還真的是回傳double...我一直以為是float 06/15 20:28
Killercat: http://tinyurl.com/bfa2472 06/15 20:28
longlongint: IEEE754對 2^-mantisa長度 取log 06/16 04:32
longlongint: 可以大約估計有效位數 06/16 04:37
longlongint: 另外你也可以把double的二進位內容印出來看 06/16 04:37
celen99: double. 不是應該是%lf ????? 06/16 09:40
Feis: 不是, 請左轉 scanf 06/16 09:50
Killercat: 其實atof這命名比較令人驚訝 為什麼是回傳double orz.. 06/16 11:24
Killercat: 另外float有效位數約7位 double約16位 06/16 11:24
EdisonX: atof : ascii string to floating number 06/16 12:30
EdisonX: 這和windows下的Wow64有異曲同工之妙 06/16 12:31
jiqian: 謝謝各位的解答,看來double的確只能到16~ 06/17 16:38