当前位置: 代码迷 >> J2SE >> 数字丢失精度?解决办法
  详细解决方案

数字丢失精度?解决办法

热度:252   发布时间:2016-04-24 02:23:18.0
数字丢失精度?
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,我觉得问题出在这里吧。
  相关解决方案