精华内容
下载资源
问答
  • Math类:java.lang.Math类中包含基本数字操作,如指数、对数、平方根和三角...java.lang.Math类中包含E和PI两个静态常量,以及进行科学计算的类(static)方法,可以直接通过类名调用。public static final Double ...

    Math类:

    java.lang.Math类中包含基本的数字操作,如指数、对数、平方根和三角函数。

    java.math是一个包,提供用于执行任意精度整数(BigInteger)算法和任意精度小数(BigDecimal)算法的类。

    java.lang.Math类中包含E和PI两个静态常量,以及进行科学计算的类(static)方法,可以直接通过类名调用。

    public static final Double E = 2.7182818284590452354

    public static final Double PI = 3.14159265358979323846

    public static long abs(double x):传回 x 的绝对值。X也可int long float

    public static long sin(double x): 传回x径度的正弦函数值

    public static long cos(double x):传回x径度的余弦函数值

    public static long tan(double x): 传回x径度的正切函数值

    public static long asin(double x):传回x值的反正弦函数值。

    public static long acos(double x):传回x值的反余弦函数值。

    public static long atan(double x):传回x值的反正切函数值。

    public static long atan2(double x, double y):传回极坐标(polar)的θ值

    public static long floor(double x):传回不大于x的最大整数值

    public static long ceil(double x):传回不小于x的最小整数值。

    public static long exp(double x):传回相当于ex值

    public static long log(double x):传回x的自然对数函数值

    public static long max(double x,double y):传回x、y较大数

    public static long min(double x,double y):传回x、y较小数

    public static long pow(double x,double y):传回x的y次幂值

    public static long sqrt(double x): 传回x开平方值

    public static long rint(double x):传回最接近x的整数值

    public static long round(double x):传回x的四舍五入值

    public static long toDegrees(double angrad):传回将angrad径度转换成角度

    public static long toRadians(double angdeg): 传回将angdeg角度转换成径度

    public static long random():传回随机数值,产生一个0-1之间的随机数(不包括0和1)

    NumberFormat类:

    (public abstract class NumberFormat extends Format)

    用java.text.NumberFormat类对输出的数字结果进行必要的格式化。

    使用该类如下方法类实例化一个NumberFormat对象:

    public static final NumberFormat getInstance()

    然后用该对象调用如下方法可以格式化数字number(返回字符串对象):

    public final String format(double number)

    NumberFormat类有如下常用方法:

    public void setMaximumFractionDigits(int newValue)//设置数的小数部分所允许的最大位数。

    public void setMaximumIntegerDigits(int newValue)//设置数的整数部分所允许的最大位数。

    public void setMinimumFractionDigits(int newValue)//设置数的小数部分所允许的最小位数。

    public void setMinimumIntegerDigits(int newValue)//设置数的整数部分所允许的最小位数。

    (更多方法及用法看JDK6API参考。)

    BigInteger类、BigDecimal类:

    java.math包中的BigInteger类和BigDecimal类分别提供任意精度的整数和小数运算。

    两个类设计思想一样,这里只对BigInterger类稍做介绍,细节可以查看JDK6API参考。

    构造方法如下:

    BigInteger(String val)  //将 BigInteger 的十进制字符串表示形式转换为 BigInteger。

    还有很多考虑周全的构造函数,建议要准备写特殊需求的BigInteger前先认真翻下JDK。

    常用方法:

    abs()  //返回其值是此BigInteger的绝对值的BigInteger。

    add(BigInteger val)  //返回其值为(this+val)的BigInteger。

    subtract(BigInteger val)  //返回其值为(this-val)的BigInteger。

    multiply(BigInteger val)  // 返回其值为(this*val)的BigInteger。

    divide(BigInteger val)  //返回其值为(this/val)的BigInteger。

    remainder(BigInteger val)  //返回其值为(this%val)的BigInteger。

    compareTo(BigInteger val)  //将此BigInteger与指定的BigInteger进行比较。返回值1、0、-1分别表示大于、等于、小于

    pow(int exponent)  //返回当前大数的exponent次幂。

    toString()  //返回此BigInteger的十进制字符串表示形式。

    toString(int radix)  //返回此BigInteger的给定基数(radix进制)的字符串表示形式。

    补充:

    (1)abs():返回某数字的绝对值.参数可以是float、double、long或int。如果是byte或short类型,那么它们会被强制转换成int类型。

    (2)ceil()会找到下一个最大整数。例如参数为9.01时,返回10.0。为-0.1时,返回-0.0。返回比参数大的整数,而且都是双精度类型的。如果参数是整数,则该方法会返回这个参数的双精度型。

    (3)floor()返回紧邻的最小整数。作用与ceil()正好相反,返回的是比参数小的整数,而且都是双精度型。如果参数为整数,则返回这个参数的双精度型。

    (4)max()返回两个值中的最大值,只支持float double long int 不支持byte short。

    (5)min()返回两个值中的最小值,只支持float double long int 不支持byte short。

    (6)random()返回一个随机数,一个在0.0到1.0之间的双精度数。

    (7)round()返回与某浮点数值最接近的整数值。参数可以为double和folat两种,而且支持四舍五入。例如:参数为9.01时,返回9,参数为9.5时,返回10,参数为-9.5时,返回-9。

    (8)sqrt()返回某数值的平方根。如果该参数是"非数字"类型(NaN),或者小于零,则返回是NaN。

    展开全文
  • 主要介绍了java的数学计算函数的总结的相关资料,需要的朋友可以参考下
  • 主要介绍了java 数学计算的具体使用,文中通过示例代码介绍非常详细,对大家学习或者工作具有一定参考学习价值,需要朋友们下面随着小编来一起学习学习吧
  • java 数学计算

    2020-01-01 18:06:22
    java.lang.Math 库提供了常用的数学计算工具 常量 final double E = 2.7182818284590452354; // 自然对数底数 final double PI = 3.14159265358979323846; // 圆周率 final double DEGREES_TO_RADIA...

    java 数学计算

    java.lang.Math 库提供了常用的数学计算工具

    常量

    final double E = 2.7182818284590452354;                 // 自然对数底数
    final double PI = 3.14159265358979323846;               // 圆周率
    final double DEGREES_TO_RADIANS = 0.017453292519943295; // 角度转弧度
    final double RADIANS_TO_DEGREES = 57.29577951308232;    // 弧度转角度
    

    取整

    • abs(x): 绝对值
    • floor(x): 向下取整
    • ceil(x): 向上取整
    • round(x): 四舍五入,如果有两个(x.5),返回较大的那个数
    • rint(x): 最接近的整数,如果有两个(x.5),返回偶数
    • floorDiv(x, y): 向下取整除法
    • floorMod(x, y): java 默认的取摸 % 得到的结果和 x 的符号相同,floorMody 的符号相同
    double delta = 0.0000001;
    assertEquals(Math.abs(-6), 6);
    assertEquals(Math.floor(-6.2), -7, delta);  // 向下取整
    assertEquals(Math.floor(6.2), 6, delta);
    assertEquals(Math.floor(6.8), 6, delta);
    assertEquals(Math.ceil(-6.2), -6, delta);   // 向上取整
    assertEquals(Math.ceil(6.2), 7, delta);
    assertEquals(Math.ceil(6.8), 7, delta);
    assertEquals(Math.round(-6.2), -6, delta);  // 四舍五入
    assertEquals(Math.round(6.2), 6, delta);
    assertEquals(Math.round(6.8), 7, delta);
    assertEquals(Math.round(-6.5), -6, delta);
    assertEquals(Math.round(6.5), 7, delta);
    assertEquals(Math.rint(-6.2), -6, delta);  // 最接近整数,如果存在两个,返回偶数
    assertEquals(Math.rint(6.2), 6, delta);
    assertEquals(Math.rint(6.8), 7, delta);
    assertEquals(Math.rint(-6.5), -6, delta);
    assertEquals(Math.rint(6.5), 6, delta);
    
    assertEquals(Math.floorDiv(7, 3), 2);
    assertEquals(Math.floorDiv(-7, 3), -3);
    assertEquals(Math.floorMod(7, 3), 1);
    assertEquals(Math.floorMod(-7, -3), -1);
    assertEquals(Math.floorMod(-7, 3), 2);
    assertEquals(-7 % -3, -1);
    assertEquals(-7 % 3, -1);
    

    三角函数

    assertEquals(Math.sin(Math.PI / 2), 1.0, delta);
    assertEquals(Math.cos(Math.PI), -1, delta);
    assertEquals(Math.tan(Math.PI / 4), 1.0, delta);
    assertEquals(Math.asin(1), Math.PI / 2, delta);
    assertEquals(Math.acos(-1), Math.PI, delta);
    assertEquals(Math.atan(1), Math.PI / 4, delta);
    

    指数对数

    • pow(x, y): x^yxy 次方
    • sqrt(x): √xx 的平方根
    • cbrt(x): 三次方根
    • hypot(x, y): √(x² + y²)
    • exp(x): e ^ x
    • expm1(x): e ^ x - 1
    • log(x): ln(x)
    • log10: lg(x)
    • log1p(x): ln(1+x)
    assertEquals(Math.pow(3, 2), 9, delta);
    assertEquals(Math.pow(2, 3), 8, delta);
    assertEquals(Math.sqrt(4), 2, delta);
    assertEquals(Math.cbrt(27), 3, delta);
    assertEquals(Math.hypot(3, 4), 5, delta);   // √(x² + y²)
    
    assertEquals(Math.exp(2.5), Math.pow(Math.E, 2.5), delta);  // e ^ x
    assertEquals(Math.expm1(2), Math.exp(2) - 1, delta);    // e ^ x - 1
    assertEquals(Math.log(Math.exp(1.5)), 1.5, delta);  // ln(x)
    assertEquals(Math.log10(1000), 3, delta);           // lg(x)
    assertEquals(Math.log1p(Math.E - 1), 1, delta);     // ln(1 + x)
    

    双曲函数

    • sinh(x): (e ^ x - e ^ -x) / 2
    • cosh(x): (e ^ x + e ^ -x) / 2
    • tanh(x): sinh(x) / cosh(x)
    assertEquals(Math.sinh(2), (Math.exp(2) - Math.exp(-2)) / 2, delta);    // sinh(x) = (e ^ x - e ^ -x) / 2
    assertEquals(Math.cosh(2), (Math.exp(2) + Math.exp(-2)) / 2, delta);    // cosh(x) = (e ^ x + e ^ -x) / 2
    assertEquals(Math.tanh(2), Math.sinh(2) / Math.cosh(2), delta);         // tanh(x) = sinh(x) / cosh(x)
    

    精确计算

    普通的数值计算在溢出时是没有感知的,比如 Long.MAX_VALUE + 1 将得到结果 Long.MIN_VALUE,为了解决这种不合理,Math 提供了一些辅助函数,在结果溢出时将抛出异常

    • addExact(x, y): 加法
    • multiplyExact(x, y): 乘法
    • decrementExact(x, y): 递减
    • incrementExact(x, y): 递增
    • negateExact(x, y): 相反数
    • multiplyFull(x, y): 接受两个 int 返回一个 long,防止溢出
    • multiplyHigh(x, y): 返回两个 long 乘积的高 64
    assertEquals(Long.MAX_VALUE + 1, Long.MIN_VALUE);                                       // 溢出
    assertThrows(ArithmeticException.class, () -> Math.addExact(Long.MAX_VALUE, 1));        // 加法溢出抛异常
    assertThrows(ArithmeticException.class, () -> Math.multiplyExact(Long.MAX_VALUE, 2));   // 乘法
    assertThrows(ArithmeticException.class, () -> Math.decrementExact(Long.MIN_VALUE));     // 递减
    assertThrows(ArithmeticException.class, () -> Math.incrementExact(Long.MAX_VALUE));     // 递增
    assertThrows(ArithmeticException.class, () -> Math.negateExact(Long.MIN_VALUE));        // 相反数
    assertEquals(Math.addExact(1, 2), 3);
    assertEquals(Math.multiplyExact(2, 3), 6);
    assertEquals(Math.incrementExact(6), 7);
    assertEquals(Math.decrementExact(6), 5);
    assertEquals(Math.negateExact(-6), 6);
    
    assertEquals(Math.multiplyFull(1, 2), 2);   // 接受两个 int 返回一个 long,防止溢出
    assertEquals(Math.multiplyHigh(1, 2), 0);   // 返回两个 long 乘积的高 64 位
    

    浮点数

    任意两个浮点数之间都有无数个浮点数,因此大部分浮点数是无法表示的,只能选取一个最接近的,java 提供了一些接口来获取能表示的浮点数

    System.out.println(Math.nextUp(1.1));   // 下一个浮点数
    System.out.println(Math.nextDown(1.1)); // 上一个浮点数
    System.out.println(Math.nextAfter(1.1, Double.POSITIVE_INFINITY));    // 下一个浮点数
    System.out.println(Math.nextAfter(1.1, Double.NEGATIVE_INFINITY));    // 上一个浮点数
    

    随机数

    math 库随机数

    System.out.println(Math.random());          // 0 ~ 1 之间的随机数
    

    java.lang.Random

    Random 类提供了更丰富的随机方法,可以返回各种不同类型的随机数

    Random r = new Random();
    System.out.println(r.nextInt());
    System.out.println(r.nextLong());
    System.out.println(r.nextFloat());
    System.out.println(r.nextDouble());
    

    Random 还提供了流式 api

    Random r = new Random();
    List<Integer> li = r.ints().limit(10).boxed().map((x) -> Math.abs(x % 100)).collect(Collectors.toList());
    System.out.println(li);
    

    java.util.Random 是线程安全的,但是,跨线程的同时使用 java.util.Random 实例可能会遇到争用,从而导致性能下降。在多线程设计中考虑使用java.util.concurrent.ThreadLocalRandom 代替 java.util.Random,ThreadLocalRandom 和 Random 拥有一致的接口

    链接

    展开全文
  • java的数学计算函数Math类:java.lang.Math类中包含基本的数字操作,如指数、对数、平方根和三角函数。java.math是一个包,提供用于执行任意精度整数(BigInteger)算法和任意精度小数(BigDecimal)算法的类。java....

    java中的数学计算函数

    Math类:

    java.lang.Math类中包含基本的数字操作,如指数、对数、平方根和三角函数。

    java.math是一个包,提供用于执行任意精度整数(BigInteger)算法和任意精度小数(BigDecimal)算法的类。

    java.lang.Math类中包含E和PI两个静态常量,以及进行科学计算的类(static)方法,可以直接通过类名调用。

    public static final Double E = 2.7182818284590452354

    public static final Double PI = 3.14159265358979323846

    public static long abs(double x):传回 x 的绝对值。X也可int long float

    public static long sin(double x): 传回x径度的正弦函数值

    public static long cos(double x):传回x径度的余弦函数值

    public static long tan(double x): 传回x径度的正切函数值

    public static long asin(double x):传回x值的反正弦函数值。

    public static long acos(double x):传回x值的反余弦函数值。

    public static long atan(double x):传回x值的反正切函数值。

    public static long atan2(double x, double y):传回极坐标(polar)的θ值

    public static long floor(double x):传回不大于x的最大整数值

    public static long ceil(double x):传回不小于x的最小整数值。

    public static long exp(double x):传回相当于ex值

    public static long log(double x):传回x的自然对数函数值

    public static long max(double x,double y):传回x、y较大数

    public static long min(double x,double y):传回x、y较小数

    public static long pow(double x,double y):传回x的y次幂值

    public static long sqrt(double x): 传回x开平方值

    public static long rint(double x):传回最接近x的整数值

    public static long round(double x):传回x的四舍五入值

    public static long toDegrees(double angrad):传回将angrad径度转换成角度

    public static long toRadians(double angdeg): 传回将angdeg角度转换成径度

    public static long random():传回随机数值,产生一个0-1之间的随机数(不包括0和1)

    NumberFormat类:

    (public abstract class NumberFormat extends Format)

    用java.text.NumberFormat类对输出的数字结果进行必要的格式化。

    使用该类如下方法类实例化一个NumberFormat对象:

    public static final NumberFormat getInstance()

    然后用该对象调用如下方法可以格式化数字number(返回字符串对象):

    public final String format(double number)

    NumberFormat类有如下常用方法:

    public void setMaximumFractionDigits(int newValue)//设置数的小数部分所允许的最大位数。

    public void setMaximumIntegerDigits(int newValue)//设置数的整数部分所允许的最大位数。

    public void setMinimumFractionDigits(int newValue)//设置数的小数部分所允许的最小位数。

    public void setMinimumIntegerDigits(int newValue)//设置数的整数部分所允许的最小位数。

    (更多方法及用法看JDK6API参考。)

    BigInteger类、BigDecimal类:

    java.math包中的BigInteger类和BigDecimal类分别提供任意精度的整数和小数运算。

    两个类设计思想一样,这里只对BigInterger类稍做介绍,细节可以查看JDK6API参考。

    构造方法如下:

    BigInteger(String val) //将 BigInteger 的十进制字符串表示形式转换为 BigInteger。

    还有很多考虑周全的构造函数,建议要准备写特殊需求的BigInteger前先认真翻下JDK。

    常用方法:

    abs() //返回其值是此BigInteger的绝对值的BigInteger。

    add(BigInteger val) //返回其值为(this+val)的BigInteger。

    subtract(BigInteger val) //返回其值为(this-val)的BigInteger。

    multiply(BigInteger val) // 返回其值为(this*val)的BigInteger。

    divide(BigInteger val) //返回其值为(this/val)的BigInteger。

    remainder(BigInteger val) //返回其值为(this%val)的BigInteger。

    compareTo(BigInteger val) //将此BigInteger与指定的BigInteger进行比较。返回值1、0、-1分别表示大于、等于、小于

    pow(int exponent) //返回当前大数的exponent次幂。

    toString() //返回此BigInteger的十进制字符串表示形式。

    toString(int radix) //返回此BigInteger的给定基数(radix进制)的字符串表示形式。

    补充:

    (1)abs():返回某数字的绝对值.参数可以是float、double、long或int。如果是byte或short类型,那么它们会被强制转换成int类型。

    (2)ceil()会找到下一个最大整数。例如参数为9.01时,返回10.0。为-0.1时,返回-0.0。返回比参数大的整数,而且都是双精度类型的。如果参数是整数,则该方法会返回这个参数的双精度型。

    (3)floor()返回紧邻的最小整数。作用与ceil()正好相反,返回的是比参数小的整数,而且都是双精度型。如果参数为整数,则返回这个参数的双精度型。

    (4)max()返回两个值中的最大值,只支持float double long int 不支持byte short。

    (5)min()返回两个值中的最小值,只支持float double long int 不支持byte short。

    (6)random()返回一个随机数,一个在0.0到1.0之间的双精度数。

    (7)round()返回与某浮点数值最接近的整数值。参数可以为double和folat两种,而且支持四舍五入。例如:参数为9.01时,返回9,参数为9.5时,返回10,参数为-9.5时,返回-9。

    (8)sqrt()返回某数值的平方根。如果该参数是"非数字"类型(NaN),或者小于零,则返回是NaN。

    需要注意的问题,类型自动提升,其实类型提升是在运算之前完成的

    加法运算

    byte a = 1;

    byte b = 2;

    byte c = a+b;

    报错,因为a+b之前会将a,b自动提升为int

    正确为: byte c = (byte)(a+b);

    减法运算

    加法运算是一样的

    乘法运算

    同样遵循类型自动提升

    int a = 3*5; 结果为: 15 int类型

    double b = 3*5.0; 结果为: 15.0 double类型

    除法运算

    两个整数相除结果为整数,小数位截断

    int a = 10/4; 结果为2

    int b 5/7; 结果为0

    如果参与运算有浮点数,则进行浮点数除

    double a = 10.0/5.0; 结果为2.0

    double b = 10.0/5; 结果为2.0

    double c = 10.0/0; 结果为Infinity(正无穷大)

    double d = -10.0/0; 结果为-Infinity(负无穷大)

    double e = 0.0/0; 结果为NaN(不是数字)

    求余运算分3步

    第一步: 左边操作数的绝对值减去右边操作数的绝对值,得到差

    第二步: 得到的差两种情况

    如果差比右边操作数的绝对值大,再执行第一步

    如果差比右边操作数的绝对值小,将差返回

    第三步: 结果的符号为左边操作数的符号

    需要注意的是: 整数进行求余时,右边操作数为0,则报错,浮点数进行求余时,右边操作数为0,则为NaN

    15%4 = 3;

    -15%4 = -3;

    15%0 报错

    15.0%0 = NaN

    自增自减运算

    int b = a++; 先把a的值赋给b,a再+1

    int b = ++a; 先给a+1,再把a的值赋给b

    关系运算符

    ==,!=,>,>=,

    逻辑运算符

    短路与: 使用&&表示,双目运算符,只要第一个操作数为false,就发生短路,后面不执行

    短路或: 使用||表示,双目运算符,只要第一个操作数为true,就发生短路,后面不执行

    非短路与: 使用&表示,双目运算符,如果第一个操作数为false,第二个操作数还会执行

    非短路或: 使用|表示,双目运算符,如果第一个操作数为true,第二个操作数还会执行

    String str = null;

    if(str != null & !str.equals("")){} 报错,空指针异常,因为第二个操作数也执行了

    if(str != null & !str.equals("")){} 不报错,因为第二个操作数没有执行

    非运算

    三目运算符

    5>10?true:false;

    位运算

    位运算cpu直接支持的,效率最高

    位运算允许对整数中单个比特进行操作,为运算会对两个操作数中对应比特执行布尔代数运算,产生结果

    & 与: 二者比特都是1,则结果为1,否则为0

    | 或: 二者比特都是0,则结果为0,否则为1

    ^ 异或: 二者比特相同,则结果为0,否则为1

    ~ 非: 讲被操作数按位取反

    int a = 12|2; // 1100|0010 打印结果14

    1100

    | 0010

    --------

    1110

    << 左移

    int a = 8<<1; //打印16

    int为32bit

    8的二进制位: 0000 0000 0000 0000 0000 0000 0000 1000

    左移动1bit,在右边填充0: 0000 0000 0000 0000 0000 0000 0001 0000

    >> 右移

    int a = 8>>1; //打印4

    int为32bit

    8的二进制位: 0000 0000 0000 0000 0000 0000 0000 1000

    右移动1bit,在右边填充0: 0000 0000 0000 0000 0000 0000 0000 0100

    数学常量

    Math.PI: 圆周率常量

    Math.E: 自然常量

    数学函数

    [java] view plaincopy

    abs()

    返回绝对值

    ceil()

    返回一个大于等于操作数的最近整数值

    Math.ceil(8.7); //9.0

    Math.ceil(9.0); //9.0

    Math.ceil(9.0); //9.0

    floor()

    返回一个不大于操作数的最近整数值

    Math.floor(8.7); //8.0

    Math.floor(9.0); //8.0

    Math.floor(9.0); //9.0

    max()

    返回两个操作数的最大一个

    Math.max(1,2);

    min()

    返回两个操作数的最小一个

    Math.min(1,2);

    random()

    返回大于等于0.0小于1.0的随机double型

    round()

    返回最接近操作数的整数(四舍五入)

    toRadians()

    转换为弧度

    Math.toRadians(90.0); //1.57079...

    sin()

    返回给定角度的正弦,操作数是double型

    Math.sin(Math.toRadians(90.0)); //求90度角的正弦值,返回1.0

    cos()

    返回给定角度的余弦,操作数是double型

    Math.cos(Math.toRadians(0.0)); //求0度角的余弦值,返回1.0

    tan()

    返回给定角度的正切,操作数是double型

    Math.tan(Math.toRadians(45.0)); //求45度角的正切值,返回1.0

    sqrt()

    返回给定值的平方根,,操作数是double型

    Math.sqrt(4.0); //2.0

    Math.sqrt(-4.0); //Nan

    toDegrees()

    返回给定弧度的角度值

    Math.toDegrees(Math.PI*0.5); //90.0

    感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

    展开全文
  • java.lang.Math 库提供了常用的数学计算工具常量final double E = 2.7182818284590452354; // 自然对数底数final double PI = 3.14159265358979323846; // 圆周率final double DEGREES_TO_RADIANS = 0....

    java.lang.Math 库提供了常用的数学计算工具

    常量

    final double E = 2.7182818284590452354; // 自然对数底数

    final double PI = 3.14159265358979323846; // 圆周率

    final double DEGREES_TO_RADIANS = 0.017453292519943295; // 角度转弧度

    final double RADIANS_TO_DEGREES = 57.29577951308232; // 弧度转角度

    取整

    abs(x): 绝对值

    floor(x): 向下取整

    ceil(x): 向上取整

    round(x): 四舍五入,如果有两个(x.5),返回较大的那个数

    rint(x): 最接近的整数,如果有两个(x.5),返回偶数

    floorDiv(x, y): 向下取整除法

    floorMod(x, y): java 默认的取摸 % 得到的结果和 x 的符号相同,floorMod 和 y 的符号相同

    double delta = 0.0000001;

    assertEquals(Math.abs(-6), 6);

    assertEquals(Math.floor(-6.2), -7, delta); // 向下取整

    assertEquals(Math.floor(6.2), 6, delta);

    assertEquals(Math.floor(6.8), 6, delta);

    assertEquals(Math.ceil(-6.2), -6, delta); // 向上取整

    assertEquals(Math.ceil(6.2), 7, delta);

    assertEquals(Math.ceil(6.8), 7, delta);

    assertEquals(Math.round(-6.2), -6, delta); // 四舍五入

    assertEquals(Math.round(6.2), 6, delta);

    assertEquals(Math.round(6.8), 7, delta);

    assertEquals(Math.round(-6.5), -6, delta);

    assertEquals(Math.round(6.5), 7, delta);

    assertEquals(Math.rint(-6.2), -6, delta); // 最接近整数,如果存在两个,返回偶数

    assertEquals(Math.rint(6.2), 6, delta);

    assertEquals(Math.rint(6.8), 7, delta);

    assertEquals(Math.rint(-6.5), -6, delta);

    assertEquals(Math.rint(6.5), 6, delta);

    assertEquals(Math.floorDiv(7, 3), 2);

    assertEquals(Math.floorDiv(-7, 3), -3);

    assertEquals(Math.floorMod(7, 3), 1);

    assertEquals(Math.floorMod(-7, -3), -1);

    assertEquals(Math.floorMod(-7, 3), 2);

    assertEquals(-7 % -3, -1);

    assertEquals(-7 % 3, -1);

    三角函数

    assertEquals(Math.sin(Math.PI / 2), 1.0, delta);

    assertEquals(Math.cos(Math.PI), -1, delta);

    assertEquals(Math.tan(Math.PI / 4), 1.0, delta);

    assertEquals(Math.asin(1), Math.PI / 2, delta);

    assertEquals(Math.acos(-1), Math.PI, delta);

    assertEquals(Math.atan(1), Math.PI / 4, delta);

    指数对数

    pow(x, y): x^y,x 的 y 次方

    sqrt(x): √x,x 的平方根

    cbrt(x): 三次方根

    hypot(x, y): √(x² + y²)

    exp(x): e ^ x

    expm1(x): e ^ x - 1

    log(x): ln(x)

    log10: lg(x)

    log1p(x): ln(1+x)

    assertEquals(Math.pow(3, 2), 9, delta);

    assertEquals(Math.pow(2, 3), 8, delta);

    assertEquals(Math.sqrt(4), 2, delta);

    assertEquals(Math.cbrt(27), 3, delta);

    assertEquals(Math.hypot(3, 4), 5, delta); // √(x² + y²)

    assertEquals(Math.exp(2.5), Math.pow(Math.E, 2.5), delta); // e ^ x

    assertEquals(Math.expm1(2), Math.exp(2) - 1, delta); // e ^ x - 1

    assertEquals(Math.log(Math.exp(1.5)), 1.5, delta); // ln(x)

    assertEquals(Math.log10(1000), 3, delta); // lg(x)

    assertEquals(Math.log1p(Math.E - 1), 1, delta); // ln(1 + x)

    双曲函数

    sinh(x): (e ^ x - e ^ -x) / 2

    cosh(x): (e ^ x + e ^ -x) / 2

    tanh(x): sinh(x) / cosh(x)

    assertEquals(Math.sinh(2), (Math.exp(2) - Math.exp(-2)) / 2, delta); // sinh(x) = (e ^ x - e ^ -x) / 2

    assertEquals(Math.cosh(2), (Math.exp(2) + Math.exp(-2)) / 2, delta); // cosh(x) = (e ^ x + e ^ -x) / 2

    assertEquals(Math.tanh(2), Math.sinh(2) / Math.cosh(2), delta); // tanh(x) = sinh(x) / cosh(x)

    精确计算

    普通的数值计算在溢出时是没有感知的,比如 Long.MAX_VALUE + 1 将得到结果 Long.MIN_VALUE,为了解决这种不合理,Math 提供了一些辅助函数,在结果溢出时将抛出异常

    addExact(x, y): 加法

    multiplyExact(x, y): 乘法

    decrementExact(x, y): 递减

    incrementExact(x, y): 递增

    negateExact(x, y): 相反数

    multiplyFull(x, y): 接受两个 int 返回一个 long,防止溢出

    multiplyHigh(x, y): 返回两个 long 乘积的高 64 位

    assertEquals(Long.MAX_VALUE + 1, Long.MIN_VALUE); // 溢出

    assertThrows(ArithmeticException.class, () -> Math.addExact(Long.MAX_VALUE, 1)); // 加法溢出抛异常

    assertThrows(ArithmeticException.class, () -> Math.multiplyExact(Long.MAX_VALUE, 2)); // 乘法

    assertThrows(ArithmeticException.class, () -> Math.decrementExact(Long.MIN_VALUE)); // 递减

    assertThrows(ArithmeticException.class, () -> Math.incrementExact(Long.MAX_VALUE)); // 递增

    assertThrows(ArithmeticException.class, () -> Math.negateExact(Long.MIN_VALUE)); // 相反数

    assertEquals(Math.addExact(1, 2), 3);

    assertEquals(Math.multiplyExact(2, 3), 6);

    assertEquals(Math.incrementExact(6), 7);

    assertEquals(Math.decrementExact(6), 5);

    assertEquals(Math.negateExact(-6), 6);

    assertEquals(Math.multiplyFull(1, 2), 2); // 接受两个 int 返回一个 long,防止溢出

    assertEquals(Math.multiplyHigh(1, 2), 0); // 返回两个 long 乘积的高 64 位

    浮点数

    任意两个浮点数之间都有无数个浮点数,因此大部分浮点数是无法表示的,只能选取一个最接近的,java 提供了一些接口来获取能表示的浮点数

    System.out.println(Math.nextUp(1.1)); // 下一个浮点数

    System.out.println(Math.nextDown(1.1)); // 上一个浮点数

    System.out.println(Math.nextAfter(1.1, Double.POSITIVE_INFINITY)); // 下一个浮点数

    System.out.println(Math.nextAfter(1.1, Double.NEGATIVE_INFINITY)); // 上一个浮点数

    随机数

    math 库随机数

    System.out.println(Math.random()); // 0 ~ 1 之间的随机数

    java.lang.Random

    Random 类提供了更丰富的随机方法,可以返回各种不同类型的随机数

    Random r = new Random();

    System.out.println(r.nextInt());

    System.out.println(r.nextLong());

    System.out.println(r.nextFloat());

    System.out.println(r.nextDouble());

    Random 还提供了流式 api

    Random r = new Random();

    List li = r.ints().limit(10).boxed().map((x) -> Math.abs(x % 100)).collect(Collectors.toList());

    System.out.println(li);

    java.util.Random 是线程安全的,但是,跨线程的同时使用 java.util.Random 实例可能会遇到争用,从而导致性能下降。在多线程设计中考虑使用java.util.concurrent.ThreadLocalRandom 代替 java.util.Random,ThreadLocalRandom 和 Random 拥有一致的接口

    链接

    Math 测试代码: https://github.com/hatlonely/hellojava/blob/master/src/test/java/util/MathTest.java

    随机数测试代码: https://github.com/hatlonely/hellojava/blob/master/src/test/java/util/RandomTest.java

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

    展开全文
  • java 数学计算java.lang.Math 库提供了常用的数学计算工具常量final double E = 2.7182818284590452354; // 自然对数底数final double PI = 3.14159265358979323846; // 圆周率final double DEGREES_TO_RADIANS = .....
  • java.lang.Math 库提供了常用的数学计算工具常量final double E = 2.7182818284590452354; // 自然对数底数final double PI = 3.14159265358979323846; // 圆周率final double DEGREES_TO_RADIANS = 0....
  • java 数学计算java.lang.Math 库提供了常用的数学计算工具常量final double E = 2.7182818284590452354; // 自然对数底数final double PI = 3.14159265358979323846; // 圆周率final double DEGREES_TO_RADIANS = .....
  • Math类:java.lang.Math类中包含基本数字操作,如指数、对数、平方根和三角...java.lang.Math类中包含E和PI两个静态常量,以及进行科学计算的类(static)方法,可以直接通过类名调用。public static final Doubl...
  • 1:Math类 2.BigInteger类 3.BigDecimal类  BigInteger bi = new BigInteger("12433241123"); BigDecimal bd = new BigDecimal("12435.351");... BigDecimal bd2 = new BigDeci...
  • java的数学计算函数

    万次阅读 2015-11-27 11:50:23
    Math类:  java.lang.Math类中包含基本数字操作,如指数、对数、平方根和三角函数。... java.lang.Math类中包含E和PI两个静态常量,以及进行科学计算的类(static)方法,可以直接通过类名调用。  pu
  • 这个应该在之前写的,忘记了,补上这次我们说一下如何用java计算数学表达式的值,比如,我们要计算sin(pi/3) + cos(pi/6) + 5.6^3,怎么计算呢?这里我们需要用到java的math的内建函数,所谓内建函数,就是java已经...
  • 在科技飞速发展今天,每天...流式数据,也即数据是实时到达,无法一次性Math类:java.lang.Math类中包含基本数字操作,如指数、对数、平方根和三角函数。java.math是一个包,提供用于执行任意精度整数(BigIn...
  • [java]代码库/*** Description: [数字计算工具类]* @version 1.0*/public class MathUtils {/** 一百常量 */private static final int HUNDRED_NUMBER = 100;/** 默认保留小数位数 */private static final int ...
  • java的数学计算函数Math类:java.lang.Math类中包含基本的数字操作,如指数、对数、平方根和三角函数。java.math是一个包,提供用于执行任意精度整数(BigInteger)算法和任意精度小数(BigDecimal)算法的类。java....
  • java语言编写 仿matlab工具 可实现对矩阵乘法运算,方程、方程组的计算,数组排序、筛选对积分的计算
  • Function、e69da5e887aa3231313335323631343130323136353331333236396561Operator 和 Variable 类定义public class Function{public String function;public int number_of_arguments;public Function( String...
  • JAVA代码实现数学计算

    2013-03-20 15:12:07
    简单一个JAVA数学计算小程序,没有界面,知识简单在调试控制输入两个操作数和操作符,显示数学计算结果
  • 思路:首先还是找规律捋清思路,上面的数学式子基本都是加偶数减奇数,为什么是基本?因为1没有这个规律,所以1要单独拿出来,剩下的数字我们用if选择语句来判断一下,如果是偶数就加上,如果是奇数就减掉,判断...
  • java.lang.Math类中包含基本数字操作,如指数、对数、平方根和三角...java.lang.Math类中包含E和PI两个静态常量,以及进行科学计算的类(static)方法,可以直接通过类名调用。public static final Double E = 2....
  • Java计算数学算式

    2020-08-10 16:53:41
    最近有个项目需要计算数学算式,网上查了一些,发现很多都是将中缀表达式转后缀表达式,然后进行计算的,找了半天也没找到一个满意于是决定花时间自己写一个,嗯,说一下大概思路: 首先说下需求:要能计算带括号...
  • java中常用的数学计算

    2020-09-11 15:25:34
    开发中,经常会有一些常用的数学计算。譬如log运算、a的b次方、求一个角度的余弦值等等,整理如下。 提示:以下是本篇文章正文内容,下面案例可供参考 一、log计算 代码示例如下。 /** * 对数运算 * 进行log运算...
  • 主要介绍了Java计算数学表达式代码详解,具有一定借鉴价值,需要朋友可以了解下。
  • java.lang.Math 库提供了常用的数学计算工具常量final double E = 2.7182818284590452354; // 自然对数底数final double PI = 3.14159265358979323846; // 圆周率final double DEGREES_TO_RADIANS = 0....
  • Java的数学计算函数

    2017-02-24 10:57:02
    Math类:java.lang.Math类中包含基本数字操作,如指数、对数、平方根和三角函数。...java.lang.Math类中包含E和PI两个静态常量,以及进行科学计算的类(static)方法,可以直接通过类名调用。public ...
  • Math类:java.lang.Math类中包含基本数字操作,如指数、对数、平方根和三角...java.lang.Math类中包含E和PI两个静态常量,以及进行科学计算的类(static)方法,可以直接通过类名调用。public static final Double ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,825
精华内容 1,530
关键字:

java的数学计算

java 订阅