【JavaSE笔记】Java常用类及其方法(十)_Math

本文详细介绍了Java中的Math类,包括其提供的各种数学运算方法,如取绝对值、向上取整、向下取整、求幂、求最大值、获取随机数等。同时提供了Math类中预定义常量E和PI的使用示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本期知识点:
Math

类 Math(java.lang)

public final class Math extends Object

Math 类包含用于执行基本数学运算的方法,如初等指数、对数、平方根和三角函数。

与 StrictMath 类的某些数学方法不同,并非 Math 类所有等价函数的实现都定义为返回逐位相同的结果。此类在不需要严格重复的地方可以得到更好的执行。

默认情况下,很多 Math 方法仅调用 StrictMath 中的等价方法来完成它们的实现。建议代码生成器使用特定于平台的本机库或者微处理器指令(可用时)来提供 Math 方法更高性能的实现。这种更高性能的实现仍然必须遵守 Math 的规范。

实现规范的质量涉及到两种属性,即返回结果的准确性和方法的单调性。浮点 Math 方法的准确性根据 ulp(units in the last place,最后一位的进退位)来衡量。对于给定的浮点格式,特定实数值的 ulp 是包括该数值的两个浮点值的差。当作为一个整体而不是针对具体参数讨论方法的准确性时,引入的 ulp 数用于任何参数最差情况下的误差。如果一个方法的误差总是小于 0.5 ulp,那么该方法始终返回最接近准确结果的浮点数;这种方法就是正确舍入。一个正确舍入的方法通常能得到最佳的浮点近似值;然而,对于许多浮点方法,进行正确舍入有些不切实际。相反,对于 Math 类,某些方法允许误差在 1 或 2 ulp 的范围内。非正式地,对于 1 ulp 的误差范围,当准确结果是可表示的数值时,应该按照计算结果返回准确结果;否则,返回包括准确结果的两个浮点值中的一个。对于值很大的准确结果,括号的一端可以是无穷大。除了个别参数的准确性之外,维护不同参数的方法之间的正确关系也很重要。因此,大多数误差大于 0.5 ulp 的方法都要求是半单调的:只要数学函数是非递减的,浮点近似值就是非递减的;同样,只要数学函数是非递增的,浮点近似值就是非递增的。并非所有准确性为 1 ulp 的近似值都能自动满足单调性要求。

Math类的字段

public static final double E       比任何其他值都更接近 e(即自然对数的底数)的 double 值。
public static final double PI    比任何其他值都更接近 pi(即圆的周长与直径之比)的 double 值。

Math类的成员方法:

public static int abs(int a)   绝对值
public static double ceil(double a)   向上取整
public static double floor(double a)   向下取整
public static double pow(double a, double b)   a的b次幂
public static int max(int a,int b)   求最大值
public static double random()   获取一个随机数:[0.0,1.0)
public static long round(double a)   四舍五入
public static double sqrt(double a)   正平方根

public class MathDemo01 {
	public static void main(String[] args) {
		//public static final double PI
				System.out.println("PI:"+Math.PI);
				
		//		public static final double E
				System.out.println("E:"+Math.E);
				
		//		public static int abs(int a):绝对值
				System.out.println("abs:"+Math.abs(100));
				System.out.println("abs:"+Math.abs(-100));
				
				//public static double ceil(double a):向上取整
				System.out.println("ceil:"+Math.ceil(12.34));
				System.out.println("ceil:"+Math.ceil(12.56));
				
				//public static double floor(double a):向下取整
				System.out.println("floor:"+Math.floor(12.34));
				System.out.println("floor:"+Math.floor(12.56));
				
				//public static double pow(double a, double b):a的b次幂
				System.out.println("pow:"+Math.pow(2.0, 3.0));
				
				//	public static int max(int a,int b):求最大值
				System.out.println("max:"+Math.max(25, 20));
				System.out.println("max:"+Math.max(Math.max(50,24), 20));//方法嵌套:不属于递归 (方法调用方法本身的一种现象)
				
				//public static double random():获取一个随机数:[0.0,1.0)
				System.out.println("random:"+Math.random());
				//求:1-100之间的随机数
				System.out.println("random:"+(int)(Math.random()*100+1));
				
				
				//public static long round(double a):四舍五入
				System.out.println("round:"+Math.round(12.34f));//返回整数
				System.out.println("round:"+Math.round(12.56F));//小数过0.5进行四舍五入,返回整数
				
				//public static double sqrt(double a):正平方根
				System.out.println("sqrt:"+Math.sqrt(4));
	}
}


Math类的练习

import java.util.Scanner;

/*
 * 需求:请设计一个方法,可以实现获取任意范围内的随机数。
 * 
 * 	分析:
 * 		1)键盘可以录入两个数据
 * 			int start
 * 			int end
 * 		2)想办法获取这两个数据之间的随机数
 * 			写一个功能实现,最终返回的是一个int类型
 * 		3)输出结果
 * */
public class MathDemo02 {
	public static void main(String[] args) {
		//创建键盘录入对象
		Scanner x = new Scanner(System.in);
		//录入数据
		System.out.println("请输入开始的数:");
		int start = x.nextInt();
		System.out.println("请输入结束的数:");
		int end = x.nextInt();
		for(int i = 0 ; i < 20; i ++){
			int number = getRandom(start,end);
			System.out.println(number);
		}
	}
	private static int getRandom(int start, int end) {
		int number = (int)(Math.random()*(end-start+1)+start);
		return number;
	}
		
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值