标题:请大家看看这代码为什么会是死循环?
只看楼主
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



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




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

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