Java jdk源代码的Math包

本文详细探讨了Java数学包`java.math`中的关键类`BigDecimal`和`BigInteger`,包括它们的构造方法、核心操作(如加减乘除、舍入、比较和哈希计算)以及它们在处理高精度计算时的特点。同时,还介绍了`BitSieve`和`MutableBigInteger`类,揭示了它们在数值计算和效率优化中的作用。
摘要由CSDN通过智能技术生成

jdk源码学习java.math

阅读JDK源代码java.math中的

java.math.BigDecimal
java.math.BigInteger
java.math.BitSieve
java.math.MathContext
java.math.MutableBigInteger
java.math.RoundingMode
java.math.SignedMutableBigInteger

1java.math.BigDecimal
不可变的、任意精度的有符号十进制数。BigDecimal 由任意精度的整数非标度值 和 32 位的整数标度 (scale) 组成。
如果为零或正数,则标度是小数点后的位数。如果为负数,则将该数的非标度值乘以 10 的负 scale 次幂。因此,BigDecimal 表示的数值是unscaledValue × 10^(-scale)
提供以下操作:算术、标度操作、舍入、比较、哈希算法和格式转换。
可以通过两种类型的操作来处理 BigDecimal 的标度:标度/舍入操作和小数点移动操作。标度/舍入操作(setScale round)返回BigDecimal,其值近似地(或精确地)等于操作数的值,但是其标度或精度是指定的值;即:它们会增加或减少对其值具有最小影响的存储数的精度。小数点移动操作(movePointLeft movePointRight)返回从操作数创建的 BigDecimal,创建的方法是按指定方向将小数点移动一个指定距离。

BigDecimal 的自然排序与 equals 方法不一致。

public class BigDecimal extends Number implementsComparable<BigDecimal>
属性:
private volatile BigInteger intVal //BigDecimal
的非标度值
private int scale = 0 //BigDecimal
的标度值
private volatile transient int precision = 0 //BigDecimal
的精度.This field is mutable until set nonzero.
private volatile transient String stringCache = null //
规范的字符表示
private static final long INFLATED = Long.MIN_VALUE //
private transient long intCompact = INFLATED
private static final int MAX_COMPACT_DIGITS = 18
private static final int MAX_BIGINT_BITS = 62
private static final long serialVersionUID = 6108874887143696463L

private static final BigDecimal zeroThroughTen[] 缓存0~10的数据
public static final BigDecimal ZERO = zeroThroughTen[0]
值为0,标度为 0
public static final BigDecimal ONE = zeroThroughTen[1]
值为1,标度为 0
public static final BigDecimal TEN = zeroThroughTen[10]
值为10,标度为 0

public BigDecimal(char[] in, int offset, int len) //翻译字符数组为BigDecimal
public BigDecimal(char[] in, int offset, int len, MathContext mc) //
调用this(in, offset, len);指定精度,if (mc.precision> 0) roundThis(mc)
public BigDecimal(char[] in) //
调用this(in, 0, in.length)
public BigDecimal(char[] in, MathContext mc) //
调用this(in,0, in.length, mc)
public BigDecimal(String val) //
调用this(val.toCharArray(),0, val.length())
public BigDecimal(String val, MathContext mc) //this(val.toCharArray(), 0,val.length()); if (mc.precision > 0)roundThis(mc)

public BigDecimal(double val) //此构造方法的结果有一定的不可预知性,优先选用String参数
public BigDecimal(double val, MathContext mc) //
调用this(val);if(mc.precision > 0) roundThis(mc)

public BigDecimal(BigInteger val) // BigInteger 转换为 BigDecimalBigDecimal 的标度是零。
public BigDecimal(BigInteger val, MathContext mc) //
BigInteger 转换为 BigDecimal(根据上下文设置进行舍入)。BigDecimal 的标度为零。
public BigDecimal(BigInteger unscaledVal, int scale) //
BigInteger 非标度值和 int 标度转换为 BigDecimalBigDecimal 的值为 (unscaledVal × 10-scale)
public BigDecimal(BigInteger unscaledVal, int scale, MathContext mc) //

public BigDecimal(int val) //int转型成BigDecimal
public BigDecimal(int val, MathContext mc) //
设置精度

public BigDecimal(long val) //long转型成BigDecimal
public BigDecimal(long val, MathContext mc) //
设置精度
private BigDecimal(long val, int scale) //Trusted internal constructor
private BigDecimal(BigInteger intVal, long val, int scale) //Trusted internalconstructor

public static BigDecimal valueOf(long unscaledVal, intscale) // long 非标度值和 int 标度转换为 BigDecimal
public static BigDecimal valueOf(long val) //
long 非标度值转换为 BigDecimal
public static BigDecimal valueOf(double val) //
double非标度值转换为 BigDecimal

public BigDecimal add(BigDecimal augend) //加法
public BigDecimal add(BigDecimal augend, MathContext mc) //
加法,带精度

private BigDecimal[] preAlign(BigDecimal lhs, BigDecimalaugend,long padding, MathContext mc)

public BigDecimal subtract(BigDecimal subtrahend) //减法
public BigDecimal subtract(BigDecimal subtrahend, MathContext mc) //
减法,带精度

public BigDecimal multiply(BigDecimal multiplicand) //乘法
public BigDecimal multiply(BigDecimal multiplicand, MathContext mc) //
乘法,带精度

public BigDecimal divide(BigDecimal divisor, int scale, introundingMode) //除法
public BigDecimal divide(BigDecima

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值