找回密码
 立即注册

QQ登录

只需一步,快速开始

saber000
银牌会员   /  发表于:2014-5-9 21:12:00
11#
我觉得最大的问题在于没有处理x为负数的情况和使用==来判断,一旦x因前面的运算产生误差的话导致有小数部分,那么这个函数就会掉入悲剧的薛定谔死循环.
回复 使用道具 举报
Leo
超级版主   /  发表于:2014-5-10 11:43:00
12#
回复 11楼saber000的帖子

这个和运算误差还没有啥关系,做为double参数,如果我传入的数字是1.5,直接就不是因为运算误差,从-0.5开始掉入无限的深渊。
回复 使用道具 举报
Leo
超级版主   /  发表于:2014-5-10 11:48:00
13#
回复 7楼lihaitao的帖子

不严重,我觉得放在这里大家学习一下,这里有几件事情比较重要,做为程序员的好习惯,少出问题:
1. 传入参数要做必要的判断。如果你的算法本身要假设接下来的运算是整数,那么你一定要对小数情况做出判断之后才决定是否进入你的算法。
2. 浮点数永远不要判等
回复 使用道具 举报
Leo
超级版主   /  发表于:2014-5-10 11:50:00
14#
回复 10楼saber000的帖子

如果这位同学没有判==0,而是判断了>=0,那么就会在N足够大的时候引发堆栈溢出。系统栈貌似给了64K?记不清了,哪位同学有兴趣可以去查一下。当堆栈里面压入的函数返回地址和参数足够大的时候,系统就发生堆栈溢出。
回复 使用道具 举报
Leo
超级版主   /  发表于:2014-5-10 11:52:00
15#
回复 9楼我勒个去的帖子

你和G同学一组的?其实我发现不止一组同学这么写的。我只是随手找了一个典型的。
其实这是很多初写程序的人容易犯的错误,拿出来大家共同学习一下。
回复 使用道具 举报
saber000
银牌会员   /  发表于:2014-5-10 14:11:00
16#
回复 12楼Leo的帖子

我的意思是,这个递归200层应该都是小case,但是对于double来说200!早溢出了.
回复 使用道具 举报
Jered
注册会员   /  发表于:2014-5-10 16:36:00
17#
放一些牛逼的代码来膜拜一下啊
回复 使用道具 举报
Leo
超级版主   /  发表于:2014-5-10 22:50:00
18#
牛X的代码是个系统工程,要不等颁奖的时候让作者亲自Show一下的好。其实多从不好的代码中学习,写着写着就牛X了。
回复 使用道具 举报
paulpei
葡萄城公司职员   /  发表于:2014-5-12 17:16:00
19#
建议看下BigInteger的源码,能给大家很多启迪。
or BigDecimal
测试签名一百五十个字测试签名一百五十个字测试签名一百五十个字测试签名一百五十个字测试签名一百五十个字测试签名一百五十个字测试签名一百五十个字测试签名一百五十个字测试签名一百五十个字测试签名一百五十个字测试签名一百五十个字测试签名一百五十个字测试签名一百五
回复 使用道具 举报
xiaobai
论坛元老   /  发表于:2014-5-13 12:19:00
20#
回复 6楼Leo的帖子

就是的,痛的领悟啊,刚测试完,最大的问题就是这个堆栈溢出,。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部