标题:修改一点点就错了...求解释呀呀呀
只看楼主
sistly
Rank: 1
等 级:新手上路
帖 子:5
专家分:3
注 册:2014-6-13
结帖率:100%
已结贴  问题点数:10 回复次数:7 
修改一点点就错了...求解释呀呀呀
一.
double p;
p = pow(1 + 0.09, 10);
printf("p = %lf\n", p);  结果显示:是p = 2.367364  正确

double p;
p = pow(1 + 9/100, 10);
printf("p = %lf\n", p);   结果显示:是p = 1.000000
为什么呢?


二.还有将上面的程序改为:
double p, r;
char n = 10;
r = 0.09;
p = pow(1 + r, n);
printf("p = %lf\n", p);
此时编译时会弹出:
in function 'main':
undefined reference to 'pow'
collect2: ld 返回 1
这又是为什么?


这两个,我在32位和64位系统上都尝试了,结果都是这样的
搜索更多相关主题的帖子: 呀呀呀 double function reference undefined 
2014-06-13 19:24
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:0 
9/100等于0,这是小学一年级的知识。
设一个上学名额需要给校长送100兩银子,请问9兩银子能买到几个上学名额?
答:连一个名额都买不到,是0个。

9.0/100.0才是0.09

用pow都应该#include<math.h>
2014-06-13 20:48
sistly
Rank: 1
等 级:新手上路
帖 子:5
专家分:3
注 册:2014-6-13
得分:0 
回复 2 楼 rjsp
我写了#include<math.h>

我是这样想的:
  我前面定义了双精度浮点数的变量
  double p;
  那么系统在计算时
  p = pow(1 + 9/100, 10);
  因为p是double类型,9/100会被计算为0.09。
  而如果p是int类型的,那么9/100就是0了。
2014-06-13 21:33
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:10 
1 + 9/100就是1
只是当你将1传给pow时自动将1转化为1.0而已。
2014-06-14 08:34
砖家的谎言
Rank: 12Rank: 12Rank: 12
等 级:禁止访问
威 望:30
帖 子:693
专家分:3898
注 册:2013-12-6
得分:0 
基础问题,建议楼主看下C语言基础

我不是砖家,要努力成为砖家。
2014-06-14 08:51
天剑山
Rank: 4
等 级:业余侠客
威 望:3
帖 子:119
专家分:266
注 册:2012-8-3
得分:0 
。。。9是int型,100是int型,9/100也是int型。。。结果自然是0
2014-06-14 10:32
sistly
Rank: 1
等 级:新手上路
帖 子:5
专家分:3
注 册:2014-6-13
得分:0 
回复 5 楼 砖家的谎言
恩,刚才是看
2014-06-14 20:24
sistly
Rank: 1
等 级:新手上路
帖 子:5
专家分:3
注 册:2014-6-13
得分:0 
回复 4 楼 rjsp
哦~明白了。。。谢喽
2014-06-14 20:25



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-432897-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.473489 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved