61从零开始学Java之处理大数字相关的类有哪些?
作者:孙玉昌,昵称【一一哥】,另外【壹壹哥】也是我哦
千锋教育高级教研员、CSDN博客专家、万粉博主、阿里云专家博主、掘金优质作者
前言
我们知道,在现实世界里,实际上数字是有无穷个的,就比如0和1之间,你说有多少个数字?无数个!谁也不知道有多少个吧。但是在计算机中,数字的个数其实是有限的,因为计算机有存储空间的限制,所以实际上无论是整数还是浮点数,都是有最大范围的。比如在Java中,整型的最大范围是64位的long型整数。但是有的小伙伴问了,如果我们使用的整数超过了long型的范围怎么办?此时,我们可以通过软件来模拟一个大整数或大浮点数。
在Java中提供了两个用于大数字运算的类,分别是java.math.BigInteger类 和 java.math.BigDecimal类。这两个类都可以用于高精度计算,BigInteger类是针对整型大数字的处理类,而BigDecimal类是针对大小数的处理类,我们可以用它们来表示任意大小的整数和浮点数。接下来壹哥再带大家来学习一下,在Java中如何处理大数字。
-----------------------------------------------前戏已做完,精彩即开始---------------------------------------------
全文大约【3800】字,不说废话,只讲可以让你学到技术、明白原理的纯干货!本文带有丰富的案例及配图视频,让你更好地理解和运用文中的技术概念,并可以给你带来具有足够启迪的思考......
配套开源项目资料
Github:
GitHub - SunLtd/LearnJava
Gitee:
一一哥/从零开始学Java
一. BigInteger类
1. 简介
壹哥在之前给大家讲解8种基本类型时就说过,不同的数据类型,有不同的取值范围,我们再通过下表回顾一下:
| 类型 | 所占字节(byte) | 所占位数(bit) | 取值范围 |
| byte | 1 | 8 | -2^7 ~ 2^7-1 |
| short | 2 | 16 | -2^15 ~2^15-1 |
| int | 4 | 32 | -2^31 ~ 2^31-1 |
| long | 8 | 64 | -2^63 ~ 2^63-1 |
| char | 2字节 | 16位 | 0~65535 |
| float | 4字节 | 32位 | ±3.4E+38 |
| double | 8字节 | 64位 | ±1.7E+308 |
| boolean | 4字节 | 32位 | true\false |
从上表中我们可以看到,整型的最大取值范围是-2^63 ~ 2^63-1,浮点型的最大取值范围是±1.7E+308。但是不管这个范围有多大,有些小伙伴就想杠一下,如果我就要存一个比Integer或Long更大的数字,怎么办?
针对这种大整数的需求,我们可以使用BigInteger,它的数字范围比 Integer类型的数字范围要大得多,而且BigInteger支持任意精度的整数。也就是说在运算中,BigInteger类型可以准确地表示任何大小的整数值。BigInteger和Integer、Long一样都是Number的子类,属于不可变类。它自身带有一些可以进行运算的方法,包括基本的加、减、乘、除操作,还有很多较为高级的操作,像求绝对值、相反数、最大公约数及判断是否为质数等,所以BigInteger用起来是比较方便的。
2. 使用方法
2.1 常用API方法
如果我们要使用BigInteger类,首先要创建一个BigInteger对象。BigInteger类提供了多个构造方法,其中最直接的一个是以字符串作为参数的构造方法,即BigInteger(String val)。在创建BigInteger对象之后,我们就可以调用BigInteger类提供的方法,进行各种数学运算了,这些常用的API方法如下:
| 方法名称 | 说明 |
| add(BigInteger val) | 做加法运算 |
| subtract(BigInteger val) | 做减法运算 |
| multiply(BigInteger val) | 做乘法运算 |
| divide(BigInteger val) | 做除法运算 |
| remainder(BigInteger val) | 做取余数运算 |
| divideAndRemainder(BigInteger val) | 做除法运算,返回数组的第一个值为商,第二个值为余数 |
| pow(int exponent) | 做参数的 exponent 次方运算 |
| negate() | 取相反数 |
| shiftLeft(int n) | 将数字左移 n 位,如果 n 为负数,则做右移操作 |
| shiftRight(int n) | 将数字右移 n 位,如果 n 为负数,则做左移操作 |
| and(BigInteger val) | 做与运算 |
| or(BigInteger val) | 做或运算 |
| compareTo(BigInteger val) | 做数字的比较运算 |
| equals(Object obj) | 当参数 obj 是 Biglnteger 类型的数字并且数值相等时返回 true, 其他返回 false |
| min(BigInteger val) | 返回较小的数值 |
| max(BigInteger val) | 返回较大的数值 |
2.2 基本案例
我们先来通过一个案例,来验证一下BigInteger中的数字到底有多大。
public static void main(String[] args) {//创建一个BigInteger对象BigInteger bi = new BigInteger("1234567890");//计算1234567890的15次方,//结果=23589821655914838120947036369147203948318169938519404175968425823418008249115809912616071588527110255905622789563711716349000000000000000System.out.println(bi.pow(15));
}
我们会发现,BigInteger可以表示一个非常大的数字,比Integer、Long的范围都要大。
2.3 类型转换
壹哥在上面说过,BigInteger其实是Number的子类,我们知道,Number中定义了几个负责类型转换的方法,比如:
- 转换为byte:byteValue()
- 转换为short:shortValue()
- 转换为int:intValue()
- 转换为long:longValue()
- 转换为float:floatValue()
- 转换为double:doubleValue()
我们利用上述几个方法,就可以把BigInteger转换成基本类型。但是大家要注意,如果BigInteger表示的范围超过了基本类型的范围,在转换时会丢失高位信息,也就是说,结果不一定准确。所以如果我们需要准确地转换成基本类型,可以使用intValueExact()、longValueExact()这样的方法。不过这种方法在转换时如果超出了基本类型的范围,会直接抛出ArithmeticException异常。我们来验证一下吧。
public static void main(String[] args) {//BigInteger转基本类型BigInteger bi02 = new BigInteger("123456789000");//123456789000System.out.println("转为int类型="+bi02.intValue()); System.out.println("转为float类型="+bi02.floatValue()); System.out.println("转为long类型="+bi02.longValue()); //将123456789000乘以123456789000,然后将结果转为long类型//java.lang.ArithmeticException: BigInteger out of long rangeSystem.out.println("得到精确结果="+bi02.multiply(bi02).longValueExact());
}
但是如果BigInteger的值超过了float的最大范围(3.4x1038),结果并不会出现ArithmeticException异常,而是会出现Infinity,如下所示:
//计算999999的99次方,并得到该结果的float值
BigInteger bi03 = new BigInteger("999999").pow(99);
float f = bi03.floatValue();
System.out.println("结果="+f);
2.4 其他用法
接下来我们再来看看其他的API方法都有哪些作用。
import java.math.BigInteger;
import java.util.Scanner;/*** @author 一一哥Sun */
public class Demo10 {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);System.out.println("请输入一个整数:");// 保存用户输入的数字int num = scanner.nextInt();// 使用输入的数字创建BigInteger对象BigInteger bi = new BigInteger(num + "");// 计算大数字加上99的结果System.out.println("加法的结果:" + bi.add(new BigInteger("99")));// 计算大数字减去25的结果System.out.println("减法的结果:" + bi.subtract(new BigInteger("25")));// 计算大数字乘以3的结果System.out.println("乘法的结果:" + bi.multiply(new BigInteger("3")));// 计算大数字除以2的结果System.out.println("除法的结果:" + bi.divide(new BigInteger("2")));// 计算大数字除以3的商System.out.println("取商的结果:" + bi.divideAndRemainder(new BigInteger("3"))[0]);// 计算大数字除以3的余数System.out.println("取余的结果:" + bi.divideAndRemainder(new BigInteger("3"))[1]);// 计算大数字的4次方System.out.println("4次方的结果:" + bi.pow(4));// 计算大数字的相反数System.out.println("取反的结果:" + bi.negate());}}
在上述案例中,我们将用户输入的数字作为 BigInteger 对象的参数,然后调用该对象的各种方法,实现了加、减、乘、除等运算,并输出了最终的结果。
二. BigDecimal类
1. 简介
虽然都是用于大数字运算的类,但BigDecimal加入了小数的概念,所以是可以操作小数的。而float 和 double类型,只能用来进行科学计算或工程计算,并不适用于精度要求较高的商业计算(如货币计算),所以要用到支持任何精度的BigDecimal类。该类中提供了一系列对应的方法,可以用来做超大浮点数的运算,像加、减、乘和除等。在所有运算中,除法运算是最复杂的,因为存在除不尽的情况,需要我们考虑末位小数的处理方式。
2. 使用方法
2.1 常用构造方法
以下是BigDecimal类的常用构造方法:
- BigDecimal(double val):实例化对象时可以将双精度型转换为BigDecimal类型;
- BigDecimal(String val):实例化对象时可以将字符串形式转换为BigDecimal类型。
2.2 常用API方法
除了构造方法之外,BigDecimal还提供了一些常用的API方法供我们进行数学运算。这些方法与BigInteger的方法类型,很多方法名称和用法也都与之一致,所以这里壹哥就不再一一列出了,接下来我就直接通过一个案例给大家演示这些方法如何使用。
import java.math.BigDecimal;/*** @author 一一哥Sun V我领资料:syc_2312119590 各平台都有壹哥的同名博客哦*/
public class Demo11 {public static void main(String[] args) {BigDecimal bd = new BigDecimal("1000.05800");// 计算大数字加上99的结果System.out.println("加法的结果:" + bd.add(new BigDecimal("99")));// 计算大数字减去25的结果System.out.println("减法的结果:" + bd.subtract(new BigDecimal("25")));// 计算大数字乘以1000的结果System.out.println("乘法的结果:" + bd.multiply(new BigDecimal(1000)));//获取小数的位数,5System.out.println(bd.scale()); //去掉BigDecimal末尾的0,返回一个与原有BigDecimal相等的新对象BigDecimal bd2 = bd.stripTrailingZeros();System.out.println(bd2.scale()); }}
在上述代码中,stripTrailingZeros()方法用于去掉BigDecimal末尾的0,并返回一个与原有BigDecimal相等的新对象。而scale()方法用于获取一个数字后面0的个数,如果返回的是负数,比如-2,则表示该数是一个整数,且末尾有2个0。
2.3 divide()除法
BigDecimal进行加、减、乘时,数字的精度不会丢失,但是进行除法运算时,有可能会出现无法除尽的情况,此时必须指定精度以及如何进行截断。BigDecimal给我们提供了divide()和divideAndRemainder()两个方法可以进行除法运算。
其中,divide()方法有3个参数分别表示除数、商的小数点后的位数和近似值的处理模式,下表是壹哥给大家列出的roundingMode参数支持的处理模式。
| 模式名称 | 说明 |
| BigDecimal.ROUND_UP | 商的最后一位,如果大于 0,则向前进位,正负数都如此。 |
| BigDecimal.ROUND_DOWN | 商的最后一位无论是什么数字都省略 |
| BigDecimal.ROUND_CEILING | 商如果是正数,按照 ROUND_UP 模式处理;如果是负数,按照 ROUND_DOWN模式处理 |
| BigDecimal.ROUND_FLOOR | 与 ROUND_CELING 模式相反,商如果是正数,按照 ROUND_DOWN 模式处理;如果是负数,按照 ROUND_UP 模式处理 |
| BigDecimal.ROUND_HALF_ DOWN | 对商进行五舍六入操作。如果商最后一位小于等于 5,则做舍弃操作,否则对最后一位进行进位操作 |
| BigDecimal.ROUND_HALF_UP | 对商进行四舍五入操作。如果商最后一位小于 5,则做舍弃操作,否则对最后一位进行进位操作 |
| BigDecimal.ROUND_HALF_EVEN | 如果商的倒数第二位是奇数,则按照 ROUND_HALF_UP 处理;如果是偶数,则按照 ROUND_HALF_DOWN 处理 |
import java.math.BigDecimal;
import java.math.RoundingMode;/*** @author 一一哥Sun*/
public class Demo12 {public static void main(String[] args) {BigDecimal d1 = new BigDecimal("123.456");BigDecimal d2 = new BigDecimal("123.456789");// 会产生ArithmeticException异常,因为除不尽,可以设置RoundingMode,按照指定的方法进行四舍五入或者直接截断://BigDecimal d3 = d1.divide(d2); // 保留10位小数并四舍五入BigDecimal d4 = d1.divide(d2, 10, RoundingMode.HALF_UP); System.out.println("d4="+d4);//按指定的位数直接截断,0.xxxxBigDecimal d5 = d1.divide(d2, 4, RoundingMode.DOWN); System.out.println("d5="+d5);}
}
2.4 divideAndRemainder()除法
而divideAndRemainder()方法,会返回一个数组,内部包含两个BigDecimal,分别是商和余数,其中商总是整数,余数不会大于除数,所以我们可以利用这个方法来判断两个BigDecimal是否是整数倍数。
import java.math.BigDecimal;
import java.math.RoundingMode;/*** @author 一一哥Sun */
public class Demo12 {public static void main(String[] args) {//divideAndRemainder方法,返回一个数组,该数组内部包含了两个BigDecimal,分别是商和余数,其中商总是整数,余数不会大于除数。//我们可以利用这个特性来判断两个BigDecimal是否是整数倍数。BigDecimal n = new BigDecimal("123.456");BigDecimal m = new BigDecimal("0.123");BigDecimal[] dr = n.divideAndRemainder(m);System.out.println(dr[0]); // 1003System.out.println(dr[1]); // 0.087if (dr[1].signum() == 0) {// n是m的整数倍System.out.println("n是m的整数倍"); }else {System.out.println("n不是m的整数倍"); }}
}
3. 比较两个BigDecimal
如果我们想比较两个BigDecimal的值是否相等,需要特别注意,请不要使用equals()方法,因为使用该方式进行比较时,不但要求两个BigDecimal的值相等,还要求它们的scale()结果也相等。所以一般是建议使用compareTo()方法来比较,它会根据两个值的大小分别返回负数、正数和0,分别表示小于、大于和等于。如下所示:
import java.math.BigDecimal;/*** @author 一一哥Sun*/
public class Demo13 {public static void main(String[] args) {BigDecimal d1 = new BigDecimal("123.456");BigDecimal d2 = new BigDecimal("123.456000");// false,因为scale不同System.out.println("d1==d2? "+d1.equals(d2)); // true,因为d2去除尾部0后scale变为2System.out.println("d1==d2? "+d1.equals(d2.stripTrailingZeros())); //结果=0,负数表示小于,正数表示大于,0表示等于System.out.println("d1==d2? "+d1.compareTo(d2));}}
之所以需要使用compareTo()方法来比较两个BigDecimal的值才准确,这是因为一个BigDecimal实际上由一个BigInteger和一个scale组合而成的,其中BigInteger表示一个完整的整数,scale表示小数位数。如下图所示:

compareTo()方法内部会对小数位数进行判断,所以更准确,如下图:

4. 配套视频
与本节内容配套的视频链接如下:
External Player - 哔哩哔哩嵌入式外链播放器
-----------------------------------------------正片已结束,来根事后烟---------------------------------------------
三. 结语
至此,壹哥就把BigInteger、BigDecimal等大数字类介绍完毕了,最后给大家总结一下今天的重点内容:
- BigInteger用于表示任意大小的整数;
- BigInteger是不变类,并且继承自Number;
- 将BigInteger转换成基本类型时可使用longValueExact()等方法保证结果准确;
- BigDecimal用于表示精确的小数,常用于财务计算;
- 比较BigDecimal的值是否相等,必须使用compareTo()而不能使用equals()。
如果你独自学习觉得有很多困难,可以加入壹哥的学习互助群,大家一起交流学习。
相关文章:
61从零开始学Java之处理大数字相关的类有哪些?
作者:孙玉昌,昵称【一一哥】,另外【壹壹哥】也是我哦 千锋教育高级教研员、CSDN博客专家、万粉博主、阿里云专家博主、掘金优质作者 前言 我们知道,在现实世界里,实际上数字是有无穷个的,就比如0和1之间&a…...
vscode 搜索界面的files to include files to exclude 是什么功能?
在VSCode(Visual Studio Code)中,搜索功能是一个强大的工具,可以帮助你在项目中快速查找特定的文本、代码或其他内容。搜索界面的 “files to include” 和 “files to exclude” 提供了一种方式来定制你的搜索范围。 files to in…...
数据计算-第15届蓝桥杯第一次STEMA测评Scratch真题精选
[导读]:超平老师的《Scratch蓝桥杯真题解析100讲》已经全部完成,后续会不定期解读蓝桥杯真题,这是Scratch蓝桥杯真题解析第154讲。 第15届蓝桥杯第1次STEMA测评已于2023年8月20日落下帷幕,编程题一共有6题,分别如下&a…...
谈谈前端和后端的选择
引言 在我的印象中,也是视线里,后端都是在一个黑屏的页面,左边一个文件类,右边在不停的写sql,一只手放在键盘上,一边写,一遍不停的关联进入,感觉很无趣,他们的分享不是什么java集成&…...
Vue3最佳实践 第六章 Pinia,Vuex与axios,VueUse 1(Pinia)
Pinia状态管理 在 Vue3 中项目中组件之间传递数据时,可以使用 Props 和 Emit,还可以使用 Provide/Inject 来代替 Props 和 Emit。Props 和 Emit 只能在具有父子关系的组件之间传递数据,所以层级越深,过程就越复杂。为了解决此类问…...
Java比较器之equals、comparable、comparator
文章目录 前言一、基本类型比较1.2.equals3.和equals的区别 二、对象的比较1.覆写基类的equals2.基于Comparable接口类的比较3.基于Comparator比较器比较4.三种方式对比 前言 在Java中,基本类型的对象可以直接比较,而自定义类型,默认是用equ…...
Virtio-user使用简介
一、简述 DPDK支持几种方式让用户空间的报文重新进入内核协议栈(这种dpdk和kernel直接通信的路径叫做exception path),例如tap/tun设备使用,kni,Virtio-user。这里主要讲Virtio-user使用,Virtio-user是virtio PMD的虚拟设备&…...
点云从入门到精通技术详解100篇-基于深度学习的三维植物点云分割网络
目录 前言 研究现状及趋势 传统的植物表型分割方法 现行的植物表型分割方法...
C语言 Cortex-A7核 SPI 实验
1 实验目的 1、数码管显示相同的值0000 1111 2222 .... 9999 2、数码管不同的值1234 2 代码 include/spi.h #ifndef __SPI_H__ #define __SPI_H__ #includ…...
Spring工具类--ReflectionUtils的使用
原文网址:Spring工具类系列--ReflectionUtils的使用_IT利刃出鞘的博客-CSDN博客 简介 本文介绍Spring的ReflectionUtils的使用。 ReflectionUtils工具类的作用:便利地进行反射操作。 Spring还有一个工具类:ReflectUtils,它们在…...
zemax西德莫尔目镜
高性能的军用光学仪器 在两个双胶合透镜之间,增加了一块平凸透镜 半视场角增大到35度 入瞳直径4mm波长0.51、0.56、0.61半视场35焦距27.9mm 镜头参数: 成像效果:...
C++ 拷贝构造函数
介绍和示例 拷贝构造函数是一种特殊的构造函数,它在创建对象时,是使用同一类中之前创建的对象来初始化新创建的对象。拷贝构造函数通常用于: 通过使用另一个同类型的对象来初始化新创建的对象。 复制对象把它作为参数传递给函数。 复制对象…...
怎么使用 Flink 向 Apache Doris 表中写 Bitmap 类型的数据
Bitmap是一种经典的数据结构,用于高效地对大量的二进制数据进行压缩存储和快速查询。Doris支持bitmap数据类型,在Flink计算场景中,可以结合Flink doris Connector对bitmap数据做计算。 社区里很多小伙伴在是Doris Flink Connector的时候&…...
LeetCode 四数相加II 哈希
原题链接: 力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 题面: 给你四个整数数组 nums1、nums2、nums3 和 nums4 ,数组长度都是 n ,请你计算有多少个元组 (i, j, k, l) 能满足: 0 < i,…...
python(自4) xpath下载 lxml安装 lxml语法 使用方式
(一)安装 搜索xpath 讲解 XPath 教程 (w3school.com.cn) 一,下载地址 : https://chrome.zzzmh.cn/info/hgimnogjllphhhkhlmebbmlgjoejdpjl 二 ,拖拽 (二)lxml安装 cmd 打开终端 cd pythond…...
05-Zookeeper典型使用场景实战
上一篇:04-Zookeeper集群详解 1. Zookeeper 分布式锁加锁原理 如上实现方式在并发问题比较严重的情况下,性能会下降的比较厉害,主要原因是,所有的连接都在对同一个节点进行监听,当服务器检测到删除事件时,…...
stl格式-3D三角形
文章目录 什么是stl文件?格式首选stl的语法1.这是一个stl格式的文件:2.下面先举个例子(难度略微提示)补充:关于\<\<我试了一下:这个法线你随便写好像也没问题\>> 3.来个立方体4.最后再写一个由三个直角形组成的立方体 什么是stl文件? 首先说一下,这个stl不是cpp…...
基于微信小程序的高校暑期社会实践小程序设计与实现(源码+lw+部署文档+讲解等)
文章目录 前言系统主要功能:具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序(小蔡coding)有保障的售后福利 代码参考源码获取 前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计…...
ARM-day2
1、 .text .global _start_start:MOV r0, #0x1ADDS r1,r0, #0x1cmp r1, #100bl funstop:b stopfun:ADD r2,r1,r1.end2、思维导图...
macOS Sonoma 14 正式版(23A344)发布,附黑/白苹果镜像下载地址
系统介绍(系统下载地址:http://www.imacosx.cn/115300.html) 黑果魏叔9 月 27日消息,苹果今日向 Mac 电脑用户推送了 macOS Sonoma 14 正式版(23A344)。 macOS 14正式版系统发布:全新功能与改…...
golang循环变量捕获问题
在 Go 语言中,当在循环中启动协程(goroutine)时,如果在协程闭包中直接引用循环变量,可能会遇到一个常见的陷阱 - 循环变量捕获问题。让我详细解释一下: 问题背景 看这个代码片段: fo…...
从WWDC看苹果产品发展的规律
WWDC 是苹果公司一年一度面向全球开发者的盛会,其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具,对过去十年 WWDC 主题演讲内容进行了系统化分析,形成了这份…...
UE5 学习系列(三)创建和移动物体
这篇博客是该系列的第三篇,是在之前两篇博客的基础上展开,主要介绍如何在操作界面中创建和拖动物体,这篇博客跟随的视频链接如下: B 站视频:s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...
【JVM】- 内存结构
引言 JVM:Java Virtual Machine 定义:Java虚拟机,Java二进制字节码的运行环境好处: 一次编写,到处运行自动内存管理,垃圾回收的功能数组下标越界检查(会抛异常,不会覆盖到其他代码…...
新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案
随着新能源汽车的快速普及,充电桩作为核心配套设施,其安全性与可靠性备受关注。然而,在高温、高负荷运行环境下,充电桩的散热问题与消防安全隐患日益凸显,成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...
vue3+vite项目中使用.env文件环境变量方法
vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量,这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...
Xen Server服务器释放磁盘空间
disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...
SQL慢可能是触发了ring buffer
简介 最近在进行 postgresql 性能排查的时候,发现 PG 在某一个时间并行执行的 SQL 变得特别慢。最后通过监控监观察到并行发起得时间 buffers_alloc 就急速上升,且低水位伴随在整个慢 SQL,一直是 buferIO 的等待事件,此时也没有其他会话的争抢。SQL 虽然不是高效 SQL ,但…...
基于IDIG-GAN的小样本电机轴承故障诊断
目录 🔍 核心问题 一、IDIG-GAN模型原理 1. 整体架构 2. 核心创新点 (1) 梯度归一化(Gradient Normalization) (2) 判别器梯度间隙正则化(Discriminator Gradient Gap Regularization) (3) 自注意力机制(Self-Attention) 3. 完整损失函数 二…...
