java math类里的函数

本文详细介绍了Java中的数学运算,包括Math类的常用方法如绝对值、取整、随机数生成等,以及大整数和大浮点数的操作方法。特别关注了精度控制问题,并提供了示例代码。

java.math.Math类常用的常量和方法:

Math.PI 记录的圆周率
Math.E记录e的常量
Math.abs 求绝对值
Math.sin 正弦函数 Math.asin 反正弦函数
Math.cos 余弦函数 Math.acos 反余弦函数
Math.tan 正切函数 Math.atan 反正切函数 Math.atan2 商的反正切函数
Math.toDegrees 弧度转化为角度 Math.toRadians 角度转化为弧度
Math.ceil 得到不小于某数的最大整数
Math.floor 得到不大于某数的最大整数

例如:Math.floor(12.7) =12.0

            Math.ceil(12.7) =13.0

ceil()是天花板,即向上取整。floor是地板,向下取整。round是四舍五入。

 

Math.IEEEremainder 求余
Math.max 求两数中最大
Math.min 求两数中最小
Math.sqrt 求开方
Math.pow 求某数的任意次方, 抛出ArithmeticException处理溢出异常

Math.sqrt(x):平方根
Math.pow(x,y):x的y次方

Math.exp 求e的任意次方
Math.log10 以10为底的对数
Math.log 自然对数
Math.rint 求距离某数最近的整数(可能比某数大,也可能比它小)
Math.round 同上,返回int型或者long型(上一个函数返回double型)
Math.random 返回0,1之间的一个随机数

java.math.BigInteger(大整数):
BigInteger bi1=new BigInteger("1234567890123456890");
BigInteger bi2=BigInteger.valueOf(123L);
bi1=bi1.add(bi2);//b1+b2
bi1=bi1.multiply(bi2);//b1*b2
bi1=bi1.subtract(bi2);//b1-b2
bi1=bi1.divide(bi2);// b1/b2

java.math.BigDecimal(大浮点数):
BigDecimal bd = new BigDecimal("3.1415926");
bd = bd.setScale(2,BigDecimal.ROUND_DOWN);//取3.1415926小数点后面二位

public class MathDemo {
public static void main(String args[]){
/**
* abs求绝对值
*/
System.out.println(Math.abs(-10.4));//10.4
System.out.println(Math.abs(10.1));//10.1

/**
* ceil天花板的意思,就是返回大的值,注意一些特殊值
*/
System.out.println(Math.ceil(-10.1));//-10.0
System.out.println(Math.ceil(10.7));//11.0
System.out.println(Math.ceil(-0.7));//-0.0
System.out.println(Math.ceil(0.0));//0.0
System.out.println(Math.ceil(-0.0));//-0.0

/**
* floor地板的意思,就是返回小的值
*/
System.out.println(Math.floor(-10.1));//-11.0
System.out.println(Math.floor(10.7));//10.0
System.out.println(Math.floor(-0.7));//-1.0
System.out.println(Math.floor(0.0));//0.0
System.out.println(Math.floor(-0.0));//-0.0

/**
* max 两个中返回大的值,min和它相反,就不举例了
*/
System.out.println(Math.max(-10.1, -10));//-10.0
System.out.println(Math.max(10.7, 10));//10.7
System.out.println(Math.max(0.0, -0.0));//0.0

/**
* random 取得一个大于或者等于0.0小于不等于1.0的随机数
*/
System.out.println(Math.random());//0.08417657924317234
System.out.println(Math.random());//0.43527904004403717

/**
* rint 四舍五入,返回double值
* 注意.5的时候会取偶数
*/
System.out.println(Math.rint(10.1));//10.0
System.out.println(Math.rint(10.7));//11.0
System.out.println(Math.rint(11.5));//12.0
System.out.println(Math.rint(10.5));//10.0
System.out.println(Math.rint(10.51));//11.0
System.out.println(Math.rint(-10.5));//-10.0
System.out.println(Math.rint(-11.5));//-12.0
System.out.println(Math.rint(-10.51));//-11.0
System.out.println(Math.rint(-10.6));//-11.0
System.out.println(Math.rint(-10.2));//-10.0

/**
* round 四舍五入,float时返回int值,double时返回long值
*/
System.out.println(Math.round(10.1));//10
System.out.println(Math.round(10.7));//11
System.out.println(Math.round(10.5));//11
System.out.println(Math.round(10.51));//11
System.out.println(Math.round(-10.5));//-10
System.out.println(Math.round(-10.51));//-11
System.out.println(Math.round(-10.6));//-11
System.out.println(Math.round(-10.2));//-10
}
}

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class Main {
	public static void main(String[] args)
    {
		
			BigDecimal bd1 = new BigDecimal("233.11231231231231");
			BigDecimal bd2 = new BigDecimal("2312123123123.11231");
			BigDecimal bd3 = bd2.divide(bd1);
			bd3 = bd3.setScale(20,BigDecimal.ROUND_DOWN);//取3.1415926小数点后面二位
			System.out.println(bd3);
    } 
}

这么做会有报错,因为会出现循环除,

Exception in thread "main" java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.
at java.math.BigDecimal.divide(Unknown Source)

at com.Main.main(Main.java:16)

修改为:

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class Main {
	public static void main(String[] args)
    {
		
			BigDecimal bd1 = new BigDecimal("233.11231231231231");
			BigDecimal bd2 = new BigDecimal("2312123123123.11231");
			BigDecimal bd3 = bd2.divide(bd1, 20, BigDecimal.ROUND_HALF_EVEN);
			bd3 = bd3.setScale(20,BigDecimal.ROUND_DOWN);//取3.1415926小数点后面二位
			System.out.println(bd3);
    } 
}
设置精度为小数点后20位,

下面是一些关于精度的控制的常量:

static int

ROUND_CEILING

Rounding mode to round towards positive infinity.

向正无穷方向舍入

static int

ROUND_DOWN

Rounding mode to round towards zero.

向零方向舍入

static int

ROUND_FLOOR

Rounding mode to round towards negative infinity.

向负无穷方向舍入

static int

ROUND_HALF_DOWN

Rounding mode to round towards "nearest neighbor" unless both neighbors are equidistant,

in which case round down.

向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,向下舍入,例如1.55保留一位

小数结果为1.5

static int

ROUND_HALF_EVEN

Rounding mode to round towards the "nearest neighbor" unless both neighbors are equidistant,

in which case, round towards the even neighbor.

向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,如果保留位数是奇数,

使用ROUND_HALF_UP,如果是偶数,使用ROUND_HALF_DOWN

static int

ROUND_HALF_UP

Rounding mode to round towards "nearest neighbor" unless both neighbors are equidistant,

in which case round up.

向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,向上舍入, 1.55保留一位

小数结果为1.6

static int

ROUND_UNNECESSARY

Rounding mode to assert that the requested operation has an exact result, hence no

rounding is necessary.

计算结果是精确的,不需要舍入模式

static int

ROUND_UP

Rounding mode to round away from zero.

向远离0的方向舍入


内容概要:本文介绍了一个基于冠豪猪优化算法(CPO)的无人机三维路径规划项目,利用Python实现了在复杂三维环境中为无人机规划安全、高效、低能耗飞行路径的完整解决方案。项目涵盖空间环境建模、无人机动力学约束、路径编码、多目标代价函数设计以及CPO算法的核心实现。通过体素网格建模、动态障碍物处理、路径平滑技术和多约束融合机制,系统能够在高维、密集障碍环境下快速搜索出满足飞行可行性、安全性与能效最优的路径,并支持在线重规划以适应动态环境变化。文中还提供了关键模块的代码示例,包括环境建模、路径评估和CPO优化流程。; 适合人群:具备一定Python编程基础和优化算法基础知识,从事无人机、智能机器人、路径规划或智能优化算法研究的相关科研人员与工程技术人员,尤其适合研究生及有一定工作经验的研发工程师。; 使用场景及目标:①应用于复杂三维环境下的无人机自主导航与避障;②研究智能优化算法(如CPO)在路径规划中的实际部署与性能优化;③实现多目标(路径最短、能耗最低、安全性最高)耦合条件下的工程化路径求解;④构建可扩展的智能无人系统决策框架。; 阅读建议:建议结合文中模型架构与代码示例进行实践运行,重点关注目标函数设计、CPO算法改进策略与约束处理机制,宜在仿真环境中测试不同场景以深入理解算法行为与系统鲁棒性。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值