日期:2014-05-20  浏览次数:20701 次

数字丢失精度?
Java code
double m=0.0;
        double n=6.4;
        double p=0;
        do
        {
            m=Math.pow(n+1,1/3);
            if(m-n>0)
            {
                p=m-n;
            }
            else
            {
                p=n-m;
            }
            n=m;
        System.out.println(m);    
            
        }while(p>0.0000000001);

计算x=(x+1)的1/3次方方程的解,算出来的结果不对,估计是数字的精度什么的出问题了,大家帮忙看看

------解决方案--------------------
小数计算请用BigDecimal
------解决方案--------------------
你可以看下Math.pow方法。里面有讲的,1/3是一个正无穷大的数。pow的方法是直接给你返回了1.0
用BigDecimal也不行的。是pow方法内部返回本来就是1.0
------解决方案--------------------
Math.pow(3, new BigDecimal("1").divide(new BigDecimal("3"), 3, RoundingMode.HALF_DOWN).doubleValue())
------解决方案--------------------
如果结果要更精确你可以保留100位来计算都没问题。。。
------解决方案--------------------
看一下浮点小数运算的规定,好像是IEE多少来着,忘了,你搜下
------解决方案--------------------
1/3=0,我觉得问题出在这里吧。