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

作者: jiqian (JIM)   2015-06-15 20:23:51
開發平台(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位的時候會發生錯誤~
謝謝回答唷
作者: Killercat (殺人貓™)   2015-06-15 20:27:00
這其實讓我有點驚訝,精確度到17其實是double而非float所以atof其實會回傳...double?其實double的有效精確位數是16 你17對應該是湊巧...誒,atof還真的是回傳double...我一直以為是floathttp://tinyurl.com/bfa2472
作者: longlongint (華哥爾)   2015-06-16 04:32:00
IEEE754對 2^-mantisa長度 取log可以大約估計有效位數另外你也可以把double的二進位內容印出來看
作者: celen99 (珍惜每一天)   2015-06-16 09:40:00
double. 不是應該是%lf ?????
作者: Feis (永遠睡不著 @@)   2015-06-16 09:50:00
不是, 請左轉 scanf
作者: Killercat (殺人貓™)   2015-06-16 11:24:00
其實atof這命名比較令人驚訝 為什麼是回傳double orz..另外float有效位數約7位 double約16位
作者: EdisonX (卡卡獸)   2015-06-16 12:30:00
atof : ascii string to floating number這和windows下的Wow64有異曲同工之妙
作者: jiqian (JIM)   2015-06-17 16:38:00
謝謝各位的解答,看來double的確只能到16~

Links booklink

Contact Us: admin [ a t ] ucptt.com