| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1554 人关注过本帖
标题:请大家看看这代码为什么会是死循环?
只看楼主 加入收藏
Crocodile_JX
Rank: 5Rank: 5
等 级:职业侠客
帖 子:161
专家分:335
注 册:2010-9-13
收藏
得分:0 
注意导入包,我也不知道是否正确。
答案与正确答案有点出入;应该是 数字转换时出现的误差吧?
2010-09-29 20:24
syg5434
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:山沟沟
等 级:版主
威 望:10
帖 子:285
专家分:781
注 册:2010-2-28
收藏
得分:0 
恩,有出入是最后的四舍五入导致的
item = numerator.divide(denominator, BigDecimal.ROUND_HALF_UP);
换成这样就会比正确的结果大点。

不要迷恋哥,嫂子会揍你。阿-弥-陀-佛--!
2010-09-29 20:41
shellingford
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:19
帖 子:228
专家分:1348
注 册:2010-8-9
收藏
得分:0 
果然,1和1.0构造结果是不一样的
程序代码:
public static void main(String[] args) {
        BigDecimal x=new BigDecimal("-2.1");
        BigDecimal value=new BigDecimal("0");
        BigDecimal item=new BigDecimal("1.0");
        BigDecimal numerator=new BigDecimal("1.0");
        BigDecimal denominator=new BigDecimal("2.0");
        int j=2;
        BigDecimal s=new BigDecimal("0");
        BigDecimal out=new BigDecimal("1e-5");
        int i;
        while (item.abs().compareTo(out)>=0) {
            value = value.add(item);
            numerator = numerator.multiply(x).multiply(x).multiply(new BigDecimal("-1.0"));

            s = new BigDecimal("1.0");

            for (i = 1; i <= j; i++)
                s = s.multiply(new BigDecimal(i));

            j = j + 2;
            denominator = s;
            item = numerator.divide(denominator,BigDecimal.ROUND_HALF_EVEN);

        }
        System.out.println(value.toString());
        System.out.printf("%.5f", value);
       
    }


 
2010-09-29 22:44
快速回复:请大家看看这代码为什么会是死循环?
数据加载中...
 
   



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

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