[问题] 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