• Java工具库Guava的数学运算常用方法示例代码


    场景

    Java核心工具库Guava介绍以及Optional和Preconditions使用进行非空和数据校验:

    Java核心工具库Guava介绍以及Optional和Preconditions使用进行非空和数据校验_霸道流氓气质的博客-CSDN博客_guava 校验

    为什么使用 Guava Math

    1、Guava Math 针对各种不常见的溢出情况都有充分的测试;对溢出语义,Guava 文档也有相应的说明;

    如果运算的溢出检查不能通过,将导致快速失败;

    2、Guava Math 的性能经过了精心的设计和调优;虽然性能不可避免地依据具体硬件细节而有所差异

    ,但 Guava Math 的速度通常可以与 Apache Commons 的 MathUtils 相比,在某些场景下甚至还有显著提升;

    3、Guava Math 在设计上考虑了可读性和正确的编程习惯;IntMath.log2(x, CEILING) 所表达的含义,

    即使在快速阅读时也是清晰明确的。而 32-Integer.numberOfLeadingZeros(x – 1)对于阅读者来说则不够清晰。

    注:

    博客:
    霸道流氓气质的博客_CSDN博客-C#,架构之路,SpringBoot领域博主
    关注公众号
    霸道的程序猿
    获取编程相关电子书、教程推送与免费下载。

    有溢出检查的运算

    Guava Math 提供了若干有溢出检查的运算方法:结果溢出时,这些方法将快速失败而不是忽略溢出。

    1.         System.out.println(IntMath.checkedAdd(1000,2500));//3500
    2.         System.out.println(IntMath.checkedSubtract(10000,2500));//7500
    3.         System.out.println(IntMath.checkedMultiply(1000,250));//250000
    4.         //checkedPow(int b, int k) 计算b的k次方
    5.         System.out.println(IntMath.checkedPow(2,5));//32
    6.         //System.out.println(IntMath.checkedPow(Integer.MAX_VALUE,Integer.MAX_VALUE));//java.lang.ArithmeticException: overflow: checkedPow

     

    实数运算

    IntMath、LongMath 和 BigIntegerMath 提供了很多实数运算的方法,并把最终运算结果舍入成整数。

    这些方法接受一个java.math.RoundingMode枚举值作为舍入的模式

            •DOWN:向零方向舍入(去尾法)
            •UP:远离零方向舍入
            •FLOOR:向负无限大方向舍入
            •CEILING:向正无限大方向舍入
            •UNNECESSARY:不需要舍入,如果用此模式进行舍入,应直接抛出 ArithmeticException
            •HALF_UP:向最近的整数舍入,其中 x.5 远离零方向舍入
            •HALF_DOWN:向最近的整数舍入,其中 x.5 向零方向舍入
            •HALF_EVEN:向最近的整数舍入,其中 x.5 向相邻的偶数舍入

    1.         //divide除法
    2.         System.out.println(IntMath.divide(19,4,RoundingMode.FLOOR));//4
    3.         //sqrt 平方根
    4.         System.out.println(IntMath.sqrt(4,RoundingMode.CEILING));//2
    5.         System.out.println(IntMath.sqrt(5,RoundingMode.CEILING));//3
    6.         //log22为底的对数
    7.         System.out.println(IntMath.log2(6,RoundingMode.FLOOR));//2
    8.         //log1010为底的对数
    9.         System.out.println(IntMath.log10(10,RoundingMode.FLOOR));//1

    Guava 还另外提供了一些有用的运算函数

    1.         //gcd 最大公约数
    2.         System.out.println(IntMath.gcd(6,9));//3
    3.         //mod 取模
    4.         System.out.println(IntMath.mod(10,2));//0
    5.         //pow 取幂
    6.         System.out.println(IntMath.pow(2,6));//64
    7.         //isPowerOfTwo是否2的幂
    8.         System.out.println(IntMath.isPowerOfTwo(4));//true
    9.         System.out.println(IntMath.isPowerOfTwo(5));//false
    10.         //factorial 阶乘
    11.         System.out.println(IntMath.factorial(3));//6
    12.         //binomial 二项式系数
    13.         System.out.println(IntMath.binomial(4,2));//6

     

  • 相关阅读:
    动力节点老杜JavaWeb笔记(全)
    Java第7章 类的高级特性
    Python学的好,工作不愁找
    HBase 2.x ---- HBase API
    InfluxDB学习记录(二)——influxdb的关键概念
    设计模式--策略模式
    NumPy掩码数组
    牛客网链表反转解题代码
    数据链路层协议 ——— 以太网协议
    RPA应用中面临的4大安全风险
  • 原文地址:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/128005801