鱼C论坛

 找回密码
 立即注册
查看: 5246|回复: 19

求解,C语言pow函数问题

[复制链接]
发表于 2013-4-18 22:14:10 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 GeekDream 于 2013-4-18 22:22 编辑

(本人新手,还不会利用反汇编分析,只好求助论坛,望得正解~~)

在写其他代码时,遇到的问题,为了简洁的把核心问题展示出来,另写了这段代码,如下:
  1. #include<stdio.h>
  2. #include<math.h>

  3. void main()
  4. {
  5.     int i,j;
  6.     for(j=0; j<2; j++)
  7.     {
  8.         for(i=0; i<4; i++)
  9.         {
  10.              printf("%d ",(int)pow(10,i));
  11.         }
  12.         printf("\n");
  13.     }
  14.     for(i=0; i<4; i++)
  15.     {
  16.          printf("%d ",(int)pow(10,i));
  17.     }
  18. }
复制代码


测试结果如下(所用工具:Code::Blocks 10.05): (问题是:第三行第三列为何是99? )

测试结果.PNG


小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-4-19 09:02:29 | 显示全部楼层
我只是路过打酱油的。{:1_1:}
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-4-19 09:06:36 | 显示全部楼层
其实没看懂是什么
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-4-19 09:21:59 | 显示全部楼层
浮点数 有精度问题 你如果想看到100可以这样
printf("%g ", pow(10, i));
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-4-19 10:27:27 | 显示全部楼层
这个是精度问题
你把pow重载函数的第一个改为浮点型就可以了

  1. #include<stdio.h>
  2. #include<math.h>void main()
  3. {
  4.     int i,j;
  5.     for(j=0; j<2; j++)
  6.     {
  7.         for(i=0; i<4; i++)
  8.         {
  9.              printf("%d ",(int)pow(10.0,i));
  10.         }
  11.         printf("\n");
  12.     }
  13.     for(i=0; i<4; i++)
  14.     {
  15.          printf("%d ",(int)pow(10.0,i));
  16.     }
  17. }
复制代码

小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-4-19 10:44:35 | 显示全部楼层

额 这个我就不知道了  我查了下 pow函数  参数传递时 要匹配 参数 ,如果两个参数类型相同,就会发生重载错误,我是在机子上调试了的
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-4-19 10:46:52 | 显示全部楼层
q330483012 发表于 2013-4-19 10:44
额 这个我就不知道了  我查了下 pow函数  参数传递时 要匹配 参数 ,如果两个参数类型相同,就会发生重载 ...

QQ截图20130419104526.jpg
附上调试图哈 请指教
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-4-19 10:52:09 | 显示全部楼层
q330483012 发表于 2013-4-19 10:46
附上调试图哈 请指教

你在试试传入参数为 10 的试试看结果
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-4-19 10:53:40 | 显示全部楼层
q330483012 发表于 2013-4-19 10:44
额 这个我就不知道了  我查了下 pow函数  参数传递时 要匹配 参数 ,如果两个参数类型相同,就会发生重载 ...

另外 这里没重载什么事 因为这个是C语言的代码
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-4-19 10:54:09 | 显示全部楼层
我是师兄 发表于 2013-4-19 10:52
你在试试传入参数为 10 的试试看结果

QQ截图20130419105237.jpg
就会报重载错误 我也不知道什么原因
我在百度查了下 就说是参数问题
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-4-19 10:55:38 | 显示全部楼层
额  师兄  我还真不知道c有没有重载  我学的是C++
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-4-19 10:55:47 | 显示全部楼层
q330483012 发表于 2013-4-19 10:54
就会报重载错误 我也不知道什么原因
我在百度查了下 就说是参数问题

因为 你的文件后缀名 应该是 C 而不是 CPP
你把这个当成是C++的代码编译了
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-4-19 10:57:28 | 显示全部楼层
我是师兄 发表于 2013-4-19 10:55
因为 你的文件后缀名 应该是 C 而不是 CPP
你把这个当成是C++的代码编译了

C++不是兼容C吗?那怎么修改参数就可以了??师兄 我可是潜心求教哈 没其他意思
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-4-19 11:05:13 | 显示全部楼层
q330483012 发表于 2013-4-19 10:57
C++不是兼容C吗?那怎么修改参数就可以了??师兄 我可是潜心求教哈 没其他意思

不要被欺骗了
那只是假象
C++需要支持面向对象
和C语言 已经有许多的不同

简单就一句话 别把C++当成C语言
尤其是在你还不了解两者
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-4-19 11:07:00 | 显示全部楼层
q330483012 发表于 2013-4-19 10:57
C++不是兼容C吗?那怎么修改参数就可以了??师兄 我可是潜心求教哈 没其他意思

这里的
C++需要处理函数重载
根据参数类型不同调用不同的函数

而C语言没那么多事情
直接安装函数名确定调用哪一个函数
不会出现你看到问题
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-4-19 11:07:25 | 显示全部楼层
我是师兄 发表于 2013-4-19 11:05
不要被欺骗了
那只是假象
C++需要支持面向对象

额 我还以为c++就是C的扩展 谢谢
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2013-4-21 17:15:38 | 显示全部楼层
q330483012 发表于 2013-4-19 10:46
附上调试图哈 请指教

我想知道,为什前两行是100,同样的语句,第三行却是99了、、、??
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2013-4-21 17:17:22 | 显示全部楼层
q330483012 发表于 2013-4-19 10:54
就会报重载错误 我也不知道什么原因
我在百度查了下 就说是参数问题

朋友,你这什么编译器?? 貌似错误提示很给力啊、、
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2013-4-21 17:19:48 | 显示全部楼层
我是师兄 发表于 2013-4-19 09:21
浮点数 有精度问题 你如果想看到100可以这样
printf("%g ", pow(10, i));

前两行能看到100,我想知道的是,为什么代码相同,编译结果却不同了
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-4-23 18:54:43 | 显示全部楼层
GeekDream 发表于 2013-4-21 17:17
朋友,你这什么编译器?? 貌似错误提示很给力啊、、

visual studio 2012  编译C++很不错   就是编译C 就没有专业的编译C的软件牛叉了
小甲鱼最新课程 -> https://ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-8-2 19:11

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表