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

news2024/11/18 1:43:44

场景

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 提供了若干有溢出检查的运算方法:结果溢出时,这些方法将快速失败而不是忽略溢出。

        System.out.println(IntMath.checkedAdd(1000,2500));//3500
        System.out.println(IntMath.checkedSubtract(10000,2500));//7500
        System.out.println(IntMath.checkedMultiply(1000,250));//250000
        //checkedPow(int b, int k) 计算b的k次方
        System.out.println(IntMath.checkedPow(2,5));//32

        //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 向相邻的偶数舍入

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

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

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

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/30013.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

web网页设计期末课程大作业:美食餐饮文化主题网站设计——中华美德6页面HTML+CSS+JavaScript

🎀 精彩专栏推荐👇🏻👇🏻👇🏻 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业…

MCE | 表观遗传:YTHDF蛋白调节 m6A-RNA

近期,美国康奈尔大学 Samie R. Jaffrey 研究组在 Cell 上发表了题为 “A Unified Model for the Function of YTHDF Proteins in Regulating m6A-Modified mRNA” 的研究,揭示了 YTHDF 蛋白调节 m6A 修饰的 mRNA 的功能统一模型。与“不同的 m6A 位点结合…

反向传播——机器学习

目录 一、实验内容 二、实验过程 1、算法思想 2、算法原理 3、算法分析 三、源程序代码 四、运行结果及分析 五、实验总结 一、实验内容 掌握线性反向传播的原理;掌握线性反向传播的算法Python实现;熟悉非线性反向传播的原理;掌握非线性…

图的存储方式

一、邻接矩阵 图的邻接矩阵存储方式就是用两个数组来表示图。一个一维数组存储图的顶点信息,另一个二维数组存储图中边的信息。 对于无向图来说,我们可以用1表示两顶点相连,用0表示两顶点不相连。任意顶点的度为邻接矩阵中该节点的行或列的…

pytorch案例代码-2

循环神经网络——基础知识 适合前后有联系的连续数据预测,比如天气预测、股市预测、自然语言等,而这些用DNN、CNN来做计算量就太大或者没法做,h0是先验,也可以前面接上CNNFC后面连上RNN,就可以完成图像到文本的转换&am…

AE VAE 代码和结果记录

Auto Encoder 在MNIST 上记录 直接上代码 import os os.chdir(os.path.dirname(__file__)) import torch import torch.nn as nn import torch.nn.functional as F import torchvision from torchvision import transforms from torchvision.utils import save_image from to…

数据结构-学习-01-线性表之顺序表-初始化、销毁、清理、获取长度、判断为空、获取元素等实现

一、测试环境 名称值cpu12th Gen Intel Core™ i7-12700H操作系统CentOS Linux release 7.9.2009 (Core)内存3G逻辑核数2gcc 版本4.8.5 20150623 二、个人理解 数据结构分为逻辑结构和物理结构(也称为存储结构)。 1、逻辑结构 逻辑结构又可以分为以下…

JS 事件

事件 事件是 JS 和 HTML 交互的桥梁。采用“观察者模式”,使用仅在事件发生时执行的监听器(也叫处理程序)订阅事件 事件流 事件流描述的是页面接收事件的顺序。分为 3 各阶段: 事件捕获:最先触发,可以做…

致敬经典 睛彩再现——AVS产业联盟和中国移动咪咕公司携手推动AVS3视频、音频标准

2022年11月14日,中国移动咪咕公司首发AVS3移动端规模化商用版本咪咕视频6.0.7.00,该版本下设的“致敬经典 睛彩再现”专区、以及“菁彩视听”双Vivid直播视角(Audio Vivid & HDR Vivid),通过国家自主的AVS3、Audio…

回顾复习【矩阵分析】初等因子 和 矩阵的相似 || 由不变因子求初等因子 || 由初等因子和秩求Smith标准形(不变因子)

目录 1. 由不变因子,引出 初等因子的概念2. 【必看】例子:已知 不变因子,求初等因子。3.【必看】 例子:已知 秩和初等因子,求史密斯标准形(不变因子)4. 分块矩阵 初等因子的 求法5. 数字矩阵的相似 与 入-矩阵的等价1. 由不变因子,引出 初等因子的概念 例如,下面两个矩阵…

Kotlin 开发Android app(十):Android控件绑定ViewBinding

上一节中,我们知道了Android的布局,这种把界面和逻辑控制分开,是编程里很好的分离方式,也大大的解耦了界面和逻辑控制,使得编程的逻辑不在和界面挂钩。 有了界面的布局,我们需要把界面和代码部分进行绑定&…

OpenPose训练教程

找遍全网都没有非常完整的OpenPose训练教程 决定自己摸索并且记录下来 openpose作者发布了一份训练代码,下面根据这个来操作 GitHUB地址: openpsoe_train 环境:ubuntu 执行matklab脚本的时候懒得下载新的matlab 就在windows下运行的 感觉没…

品质为先,服务不停,广州流辰信息公司恪守初心,匠心为民!

随着互联网技术的蓬勃发展,越来越多的企业也感受到了日益激烈的竞争,也意识到墨守成规的发展模式必当会让企业停滞不前,只有一步一个脚印,始终跟随市场的脚步创新升级,才有可能在汹涌的市场洪流中站稳脚跟。广州流辰信…

精简 Windows10

下载链接文后评论里找: 旧机福音 极限精简Win10系统Tiny10https://baijiahao.baidu.com/s?id1743901721464184983不想成天折腾操作系统,一直以来都认为跟着微软每月升级就好了。但是现实啪啪的打脸:升级到Windows11 22H2 后, 连…

常见算法设计与分析的简单C++代码实现(排列、二分法搜索、Dijkstra算法、元素换位、单调子序列、硬币问题、运动员最佳匹配问题)

常见算法设计与分析的简单C代码实现(排列、二分法搜索、Dijkstra算法、元素换位、单调子序列、硬币问题、运动员最佳匹配问题)1 一些简单排列问题2 二分法查找3 前后元素换位4 找最长单调递增子序列(O(n2)复杂度)5最小硬币问题一、…

c3p0,DBCP,Druid(德鲁伊)数据库连接池

c3p0,DBCP,Druid(德鲁伊)数据库连接池 每博一文案 佛说:前世 500 次的回眸,才换来今生的一次擦肩而过。 人与人之间的缘分,真的无需强求,并不是所有的感情都能天长地久,…

C#压缩图片

SqlSer数据库设置保存图片字段类型为Image类型 对应保存 方法参数为图片路径&#xff0c;压缩后路径&#xff0c;压缩最大宽度&#xff0c;压缩最大高度 引用类型using System.Data; using System.Drawing; using System.IO; \完整类 /// <summary> /// 按比例缩放&…

七牛qshell 批量上传 mac 本地目录

七牛qshell 批量上传 mac 本地目录下载路径及使用方法(官方)下载到自己指定的文件夹添加环境变量,使qshell在任意地方可以执行添加密钥 生成账户文件下载路径及使用方法(官方) https://developer.qiniu.com/kodo/1302/qshell记录自己部署遇到的问题及操作步骤 下载到自己指定…

音视频开发核心知识点及源码解析,还不赶紧收藏起来

随着基础设施的完善&#xff08;光纤入户、wifi覆盖、5G普及&#xff09;的影响&#xff0c;将短视频、直播、视频会议、在线教育、在线医疗瞬间推到了顶峰&#xff0c;人们对音视频的需求和要求也越来越强烈 音视频开发还具有许多方向&#xff0c;比如&#xff1a; 如果对音视…

C语言:while后加分号与for后加分号的区别

while 后面不能加分号&#xff0c;否则虽然编译可以通过&#xff0c;但是执行程序时会发生死循环#include <stdio.h> int main() { int i1,total0; while(i<100)//不能在 while 后面加分号 { totali; i;//循环…