求助,math库函数pow

ChampionLai 2013-03-02 10:51:22
#include<stdio.h>
#include<math.h>



int main()
{
int temp = (int)pow(10.0,2);
printf("%d",temp);
while(1);
return 0;
}
输出答案是99
这是怎么回事为什么不是100,1被dog吃了?
...全文
234 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
lm_whales 2013-03-05
  • 打赏
  • 举报
回复
你这是单片机C语言吧!!
lm_whales 2013-03-05
  • 打赏
  • 举报
回复
(int)(99.9999.....)=99
mujiok2003 2013-03-04
  • 打赏
  • 举报
回复
强制类型转换的意思,就是程序员承担一切后果。
赵4老师 2013-03-04
  • 打赏
  • 举报
回复
用10进制小数不能精确表示某些三进制小数0.1(3)=0.33333333333……(10) 同理,用二进制小数也不能精确表示某些10进制小数。 int temp = (int)(pow(10.0,2.0)+0.5);
Burcy Wen 2013-03-04
  • 打赏
  • 举报
回复
vs2008运行也是100,而且while(1);是做什么的?死循环么?你的环境可能不同pow()有几种重载函数
starytx 2013-03-04
  • 打赏
  • 举报
回复
vs2005运行结果:100
ForestDB 2013-03-04
  • 打赏
  • 举报
回复
double到int不是四舍五入的关系。
意吟 2013-03-03
  • 打赏
  • 举报
回复
这是因为 浮点数的关系, 其实temp=99.9999999999999999999999999999999999999999999999 但是因为你 输出 %d, 小数点部分被截取,所以看到的结果会是99 不过temp值的确等于100, 不信,可以加上断言 assert(temp == 100) 一目了然
「已注销」 2013-03-02
  • 打赏
  • 举报
回复
我用的VS2010,编译后结果是100
Athenacle_ 2013-03-02
  • 打赏
  • 举报
回复

while(1);
浮点计算本来不那么精确,然后被你强转成int,误差更多了。。。。

64,644

社区成员

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

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