Java Math.pow(x,y)的使用坑

来源:互联网 发布:python量化 编辑:程序博客网 时间:2024/04/29 15:50

       Java Math.pow(x,y)的使用坑,项目中为了比较一些业务数据,使用到了这个函数:如下:

public void setBaseLineData(double baseLineData) {if (Math.abs(this.baseLineData - baseLineData) > Math.pow(0.1, getBaseLineLabelFraction())) {System.out.println("有没有进来这里=============重新设置base的值");this.baseLineData = baseLineData;refreshState();}}

       这里面有一个问题就是如果y的参数为0的话,Math(0.1,0)的数值就是1,也就是任何数的0次方都为1,哎,好久没学数学了都.记录一下:
因为Math.pow(x,y)这个函数是求x的y次方,x,y的值都是浮点类型的,而你现在要求的是pow(64,1/3),那么也就是64的1/3次方,如果我们口头上来算的话,可以看成64的3次方根,但是计算机不会这样算,他会先求出1/3的值,1/3中1和3均为int类型,所以值为0,然后y这个值是浮点类型,所以自动转换为0.0,任何数字的0次幂都为1,所有这个地方求出来的值为1,而不是4,有时候我们不能以数学的方式来判断计算机的算法,

        还有如果求一个数值的绝对值也可以使用Math.abs()之前一直还想自己进行判断,原来早有提供.写了一个测试程序,展示如下:

public class Ceshi {public static void main(String[] args) {double powceshi = Math.pow(0.1, 0);double powdouble1 = Math.pow(0.1, 0.1);double powdouble2 = Math.pow(0.1, 0.01);double powdouble3 = Math.pow(0.1, 0.001);double powdouble4 = Math.pow(0.1, 0.0001);double powdouble5 = Math.pow(0.1, 0.00001);System.out.println("当为0的情况下的Math.pow(0.1, 0)" + powceshi);System.out.println("输出的数值为Math.pow(0.1, 0.1):" + powdouble1);System.out.println("输出的数值为Math.pow(0.1, 0.01):" + powdouble2);System.out.println("输出的数值为Math.pow(0.1, 0.001):" + powdouble3);System.out.println("输出的数值为Math.pow(0.1, 0.0001):" + powdouble4);System.out.println("输出的数值为Math.pow(0.1, 0.00001):" + powdouble5);}}
结果如下:
当为0的情况下的Math.pow(0.1, 0)1.0输出的数值为Math.pow(0.1, 0.1):0.7943282347242815输出的数值为Math.pow(0.1, 0.01):0.9772372209558107输出的数值为Math.pow(0.1, 0.001):0.9977000638225533输出的数值为Math.pow(0.1, 0.0001):0.9997697679981565输出的数值为Math.pow(0.1, 0.00001):0.9999769744141629



0 0
原创粉丝点击