浮点数运算精度丢失,如何解决
为什么浮点数运算的时候会有精度丢失的风险?
浮点数运算精度丢失代码演示:
float a = 2.0f - 1.9f;
float b = 1.8f - 1.7f;
System.out.println(a);// 0.100000024
System.out.println(b);// 0.099999905
System.out.println(a == b);// false
为什么会出现这个问题呢?
这个和计算机保存浮点数的机制有很大关系。我们知道计算机是二进制的,而且计算机在表示一个数字时,宽度是有限的,无限循环的小数存储在计算机时,只能被截断,所以就会导致小数精度发生损失的情况。这也就是解释了为什么浮点数没有办法用二进制精确表示。
就比如说十进制下的 0.2 就没办法精确转换成二进制小数:
// 0.2 转换为二进制数的过程为,不断乘以 2,直到不存在小数为止,
// 在这个计算过程中,得到的整数部分从上到下排列就是二进制的结果。
0.2 * 2 = 0.4 -> 0
0.4 * 2 = 0.8 -> 0
0.8 * 2 = 1.6 -> 1
0.6 * 2 = 1.2 -> 1
0.2 * 2 = 0.4 -> 0(发生循环)
...
如何解决浮点数运算的精度丢失问题?
BigDecimal 可以实现对浮点数的运算,不会造成精度丢失。通常情况下,大部分需要浮点数精确运算结果的业务场景(比如涉及到钱的场景)都是通过 BigDecimal 来做的。
BigDecimal a = new BigDecimal("1.0");
BigDecimal b = new BigDecimal("0.9");
BigDecimal c = new BigDecimal("0.8");BigDecimal x = a.subtract(b);
BigDecimal y = b.subtract(c);System.out.println(x); /* 0.1 */
System.out.println(y); /* 0.1 */
System.out.println(Objects.equals(x, y)); /* true */
超过 long 整型的数据应该如何表示?
基本数值类型都有一个表达范围,如果超过这个范围就会有数值溢出的风险。在 Java 中,64 位 long 整型是最大的整数类型。
long l = Long.MAX_VALUE;
System.out.println(l + 1); // -9223372036854775808
System.out.println(l + 1 == Long.MIN_VALUE); // true
BigInteger 内部使用 int[] 数组来存储任意大小的整形数据。相对于常规整数类型的运算来说,BigInteger 运算的效率会相对较低。
更多消息资讯,请访问昂焱数据。昂焱数据
相关文章:
浮点数运算精度丢失,如何解决
为什么浮点数运算的时候会有精度丢失的风险? 浮点数运算精度丢失代码演示: float a 2.0f - 1.9f; float b 1.8f - 1.7f; System.out.println(a);// 0.100000024 System.out.println(b);// 0.099999905 System.out.println(a b);// false为什么会出现…...
使用微信小程序openMapApp接口,报错问题解决openMapApp:fail invaild coord
使用微信小程序的 openMapApp 接口时遇到了坐标无效的错误 (openMapApp:fail invalid coord)。这个错误通常是由于提供的地理坐标不符合预期的格式或范围而引起的: 坐标格式: 确保提供的坐标符合正确的格式。常见的格式是 "纬度,经度"…...
2023亚太杯数学建模思路 - 案例:粒子群算法
文章目录 1 什么是粒子群算法?2 举个例子3 还是一个例子算法流程算法实现建模资料 # 0 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 1 什么是粒子群算法? 粒子群算法(Pa…...
【开源】基于JAVA的开放实验室管理系统
项目编号: S 013 ,文末获取源码。 \color{red}{项目编号:S013,文末获取源码。} 项目编号:S013,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、研究内容2.1 实验室类型模块2.2 实验室模块2.3 实…...
LeetCode48旋转图像
思路是沿对角线交换元素,之后沿矩阵中线交换元素 参考链接 🔗:【LeetCode 每日一题】48. 旋转图像 | 手写图解版思路 代码讲解-哔哩哔哩】 class Solution {public void rotate(int[][] matrix) {int i0,j0;if(matrixnull){return;}int n matrix.length;// int[]…...
sql手工注入漏洞测试(MYSQL)-墨者-url信息
背景: 自己在墨者官网靶场练习的时候,一直出错,手工容易出错,所以列举一些信息供大家核对,可以参考改动。 数据库版本version() 5.7.22-0ubuntu0.16.04.1 当前数据库名称database() m…...
52.seata分布式事务
目录 1.事务的四大特性。 2.分布式服务的事务问题。 3.seata。 3.1理论基础。 3.1.1CAP定理。 3.1.2BASE理论。 3.2初识Seata。 3.2.1Seata的架构。 3.2.2部署TC服务。 3.2.3微服务集成Seata。 3.3 seata提供的四种分布式事务解决方案。 3.3.1 XA模式。 3.3.1.1 X…...
HTML所有功能大汇总
HTML所有的功能,都在下面的表格中呈现清楚了。千万不要死记硬背,但是在遇到困难的时候,可以按照这个表进行查找。 类别功能HTML标签文本样式粗体<b></b> 或 <strong></strong>斜体<i></i>或<em>&…...
层次分析法--可以帮助你做决策的简单算法
作用 层次分析法是一个多指标的评价算法,主要用来在做决策时,给目标的多个影响因子做权重评分。特别是那些需要主观决策的、或者需要用经验判断的决策方案,例如: 买房子(主观决策)选择旅游地(…...
docker启动链接sqlservr的镜像时报SSl错误
本次部署中遇到了老项目中的 net core 5.0 docker 镜像访问sql server 出现SSL Handshake failed with OpenSSL error - SSL_ERROR_SSL.问题 Microsoft.Data.SqlClient.SqlException (0x80131904): A connection was successfully established with the server, but then an e…...
力扣:175. 组合两个表(Python3)
题目: 表: Person ---------------------- | 列名 | 类型 | ---------------------- | PersonId | int | | FirstName | varchar | | LastName | varchar | ---------------------- personId 是该表的主键(具有唯一值的列&#…...
【libGDX】使用Mesh绘制矩形
1 前言 使用Mesh绘制三角形 中介绍了绘制三角形的方法,本文将介绍绘制正方形的方法。 libGDX 以点、线段、三角形为图元,没有提供绘制矩形内部的接口。要绘制矩形内部,必须通过三角形拼接而成,如下图,是通过GL_TRIANGL…...
X2Keyarch迁移工具实战 | 将CentOS高效迁移至浪潮云峦操作系统KeyarchOS
X2Keyarch迁移工具实战 | 将CentOS高效迁移至浪潮云峦操作系统KeyarchOS 1. 搭建仿真线上业务环境2. 安装KeyarchOS操作系统和X2Keyarch迁移工具3. 将CentOS系统业务迁移至KeyarchOS系统 浪潮信息云峦操作系统KeyarchOS基于Linux Kernel、OpenAnolis等开源技术自主研发的一款服…...
基于VM虚拟机下Ubuntu18.04系统,Hadoop的安装与详细配置
参考博客: https://blog.csdn.net/duchenlong/article/details/114597944 与上面这个博客几乎差不多,就是java环境配置以及后面的hadoop的hdfs-site.xml文件有一些不同的地方。 准备工作 1.更新 # 更新 sudo apt update sudo apt upgrade2.关闭防火…...
【图像分类】基于深度学习的垃圾分类系统的设计与实现(ResNet网络,附代码和数据集)
写在前面: 首先感谢兄弟们的关注和订阅,让我有创作的动力,在创作过程我会尽最大能力,保证作品的质量,如果有问题,可以私信我,让我们携手共进,共创辉煌。(专栏订阅用户订阅专栏后免费提供数据集和源码一份,超级VIP用户不在服务范围之内,不想订阅专栏的兄弟们可以私信…...
MFS分布式文件系统
目录 集群部署 Master Servers Chunkservers 编辑Clients Storage Classes LABEL mfs高可用 pacemaker高可用 编辑ISCSI 添加集群资源 主机 ip 角色 server1 192.168.81.11 Master Servers server2 192.168.81.12 Chunkservers server3 192.168.81.13 Chunkserver…...
Hadoop -hdfs的读写请求
1、HDFS写数据(宏观): 1、首先,客户端发送一个写数据的请求,通过rpc与NN建立连接,NN会做一些简单的校验,文件是否存在,是否有空间存储数据等。 2、NN就会将校验的结果发送给客户端…...
【c++Leetcode】206. Reverse Linked List
问题入口 time complexity: O(n), space complexity:O(1) ListNode* reverseList(ListNode* head) {ListNode* prev nullptr;ListNode* curr head;while(curr){ListNode* forward curr->next;curr->next prev;prev curr;curr forward;}return prev; } time comp…...
[项目管理-33/创业之路-87/管理者与领导者-127]:如何提升自己项目管理的能力和水平
目录 前言: 一、项目经理的角色定位 1.1 项目经理的职责 1.2 不同矩阵类型的项目,项目经理的职责 1.3 项目经理的角色定位 1.4 项目经理的发展路径 二、项目经理项目理论和知识结构 三、软件项目经理在计算机水平的提升 四、项目经理业务知识的…...
记录一次因内存不足而导致hiveserver2和namenode进程宕机的排查
背景 最近发现集群主节点总有进程宕机,定位了大半天才找到原因,分享一下 排查过程 查询hiveserver2和namenode日志,都是正常的,突然日志就不记录了,直到我重启之后又恢复工作了。 排查各种日志都是正常的࿰…...
魔兽争霸3兼容性终极修复指南:WarcraftHelper让经典游戏重获新生
魔兽争霸3兼容性终极修复指南:WarcraftHelper让经典游戏重获新生 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 还在为魔兽争霸3在现代系…...
企业云盘高可用架构:主备切换、负载均衡与健康检查实战
task_id: csdn-016 platform: CSDN created: 2026-04-30 企业云盘高可用架构:主备切换、负载均衡与健康检查实战 凌晨两点,某设计院的IT负责人老赵被电话叫醒——CAD图纸打不开。紧急登录后台发现主服务器宕机,备机虽然在线,但数据…...
【Dify 2026缓存架构权威白皮书】:首次公开3层异构缓存协同机制与QPS提升217%实测数据
更多请点击: https://intelliparadigm.com 第一章:Dify 2026缓存架构演进与核心设计哲学 Dify 2026 的缓存体系已从早期的单层 LRU 内存缓存,演进为支持多级协同、语义感知与生命周期自治的混合缓存网格(Hybrid Cache Grid, HCG…...
自动评分系统校准:方法与工程实践
1. 自动评分器校准的核心挑战在教育培训、内容审核、创意评价等领域,自动评分系统正发挥着越来越重要的作用。但一个常见痛点在于:算法给出的分数分布往往与人类评价者的偏好分布存在显著差异。上周我参与了一个在线编程作业评分系统的优化项目ÿ…...
Spring AI开发实战:从零入门到落地,Java开发者快速解锁AI开发能力
摘要:Spring AI 作为 Spring 官方推出的企业级 AI 开发框架,核心价值在于简化 AI 模型接口集成,屏蔽不同厂商模型的调用差异,让 Java 开发者无需掌握复杂的机器学习算法、无需手动编写 HTTP 请求与返回解析逻辑,基于熟…...
视觉语言模型的高熵令牌攻击与防御策略
1. 项目背景与核心发现视觉语言模型(VLMs)在跨模态理解任务中展现出强大能力的同时,其安全漏洞也逐渐暴露。我们团队在压力测试中发现,当输入序列中包含高熵令牌(high-entropy tokens)时,模型会…...
OpenTinker模块化架构优化LLM智能体强化学习
1. OpenTinker:模块化架构重塑LLM智能体强化学习范式 在大型语言模型(LLM)向智能体形态演进的过程中,强化学习(RL)已成为超越监督微调的关键优化手段。然而传统RL框架的端到端设计模式,使得算法…...
PyCharm连接Docker容器开发,我踩过的那些坑:从端口映射到root登录权限
PyCharm连接Docker容器开发避坑指南:从端口映射到SSH配置的深度解析 在开发环境中将PyCharm与Docker容器无缝对接,本应是提升效率的利器,却常常因为各种"坑"而让人望而却步。作为一名长期在Mac和Windows双平台使用PyCharm专业版进行…...
文章十五:ElasticSearch 运用ingest加工索引数据
ingest简单介绍 他是es中的独立的数据处理加工的模块,等同于是轻量级的ETL(数据的抽取,转换,加载),类似于logstash,使用的是popeline的管道处理模型。 应用场景 数据写入,数据更新,构建大宽表,…...
开源API网关claude2api:自建Claude代理实现稳定高效调用
1. 项目概述:一个开源API网关的诞生与价值最近在折腾大模型应用开发的朋友,估计都绕不开一个痛点:如何稳定、高效、低成本地调用像Claude这样的闭源大模型API。官方API固然稳定,但价格、速率限制、以及在某些地区的可用性…...
