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

       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



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值