关于pow函数的疑问

sudosky 2008-07-18 12:14:56
前端时间写程序时老出错,结果发现是pow函数的问题:

#include<iostream>
#include<math.h>
using namespace std;
int main()
{float RR=0.4321;
int i=RR*pow(10,5);//这里输出i竟然为43209.
double j=RR*pow(10,5);//j为43210
int ii=j;//这个ii又是43209.我晕
cout<<"i:"<<i<<endl;
cout<<"j:"<<j<<endl;
cout<<"ii:"<<ii<<endl;
system("pause");
return 0;
}


哪位大虾帮忙解释下。
...全文
175 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
brookmill 2008-07-18
  • 打赏
  • 举报
回复
LZ可以把代码里的pow(10,5)换成100000再看看结果。
这种float向int的转换,可以考虑自己加个四舍五入的处理
brookmill 2008-07-18
  • 打赏
  • 举报
回复
不是pow函数的问题。
浮点数,包括float和double,在内存里的存储是有误差的。
比如0.4321,实际上保存的可能是0.432099999,也可能是0.4321000001
如果是前者,乘以pow(10,5)再强制转换成int,就变成了43209
sudosky 2008-07-18
  • 打赏
  • 举报
回复
明白了,非常感谢brookmill和k2eats的回答。发分,结贴~~
bitxinhai 2008-07-18
  • 打赏
  • 举报
回复
float RR=0.4321;
就是浮点数表示的精度问题!!
不是程序的错误!!!
K行天下 2008-07-18
  • 打赏
  • 举报
回复
浮点数精度问题,你可以添加:


#include<iostream>
#include<math.h>
#include <float.h>
using namespace std;
int main()
{float RR=0.4321;
int i=(RR+FLT_EPSILON)*pow(10,5);//这里输出i竟然为43209.
double j=(RR+FLT_EPSILON)*pow(10,5);//j为43210
int ii=j;//这个ii又是43209.我晕
cout<<"i:"<<i<<endl;
cout<<"j:"<<j<<endl;
cout<<"ii:"<<ii<<endl;
system("pause");
return 0;
}

64,282

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧