当前位置: 首页 > news >正文

浮点数运算精度丢失,如何解决

为什么浮点数运算的时候会有精度丢失的风险?

浮点数运算精度丢失代码演示:

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)。这个错误通常是由于提供的地理坐标不符合预期的格式或范围而引起的: 坐标格式: 确保提供的坐标符合正确的格式。常见的格式是 "纬度,经度"&#xf…...

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所有的功能&#xff0c;都在下面的表格中呈现清楚了。千万不要死记硬背&#xff0c;但是在遇到困难的时候&#xff0c;可以按照这个表进行查找。 类别功能HTML标签文本样式粗体<b></b> 或 <strong></strong>斜体<i></i>或<em>&…...

层次分析法--可以帮助你做决策的简单算法

作用 层次分析法是一个多指标的评价算法&#xff0c;主要用来在做决策时&#xff0c;给目标的多个影响因子做权重评分。特别是那些需要主观决策的、或者需要用经验判断的决策方案&#xff0c;例如&#xff1a; 买房子&#xff08;主观决策&#xff09;选择旅游地&#xff08;…...

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)

题目&#xff1a; 表: Person ---------------------- | 列名 | 类型 | ---------------------- | PersonId | int | | FirstName | varchar | | LastName | varchar | ---------------------- personId 是该表的主键&#xff08;具有唯一值的列&#…...

【libGDX】使用Mesh绘制矩形

1 前言 使用Mesh绘制三角形 中介绍了绘制三角形的方法&#xff0c;本文将介绍绘制正方形的方法。 libGDX 以点、线段、三角形为图元&#xff0c;没有提供绘制矩形内部的接口。要绘制矩形内部&#xff0c;必须通过三角形拼接而成&#xff0c;如下图&#xff0c;是通过GL_TRIANGL…...

X2Keyarch迁移工具实战 | 将CentOS高效迁移至浪潮云峦操作系统KeyarchOS

X2Keyarch迁移工具实战 | 将CentOS高效迁移至浪潮云峦操作系统KeyarchOS 1. 搭建仿真线上业务环境2. 安装KeyarchOS操作系统和X2Keyarch迁移工具3. 将CentOS系统业务迁移至KeyarchOS系统 浪潮信息云峦操作系统KeyarchOS基于Linux Kernel、OpenAnolis等开源技术自主研发的一款服…...

基于VM虚拟机下Ubuntu18.04系统,Hadoop的安装与详细配置

参考博客&#xff1a; https://blog.csdn.net/duchenlong/article/details/114597944 与上面这个博客几乎差不多&#xff0c;就是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写数据&#xff08;宏观&#xff09;&#xff1a; 1、首先&#xff0c;客户端发送一个写数据的请求&#xff0c;通过rpc与NN建立连接&#xff0c;NN会做一些简单的校验&#xff0c;文件是否存在&#xff0c;是否有空间存储数据等。 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]:如何提升自己项目管理的能力和水平

目录 前言&#xff1a; 一、项目经理的角色定位 1.1 项目经理的职责 1.2 不同矩阵类型的项目&#xff0c;项目经理的职责 1.3 项目经理的角色定位 1.4 项目经理的发展路径 二、项目经理项目理论和知识结构 三、软件项目经理在计算机水平的提升 四、项目经理业务知识的…...

记录一次因内存不足而导致hiveserver2和namenode进程宕机的排查

背景 最近发现集群主节点总有进程宕机&#xff0c;定位了大半天才找到原因&#xff0c;分享一下 排查过程 查询hiveserver2和namenode日志&#xff0c;都是正常的&#xff0c;突然日志就不记录了&#xff0c;直到我重启之后又恢复工作了。 排查各种日志都是正常的&#xff0…...

AI人工智能——解读智能算力服务质量模型

本文介绍了智能算力服务质量模型ICPS-QM的核心内容。随着大模型参数量呈指数性增长和智能算力服务需求的激增,国家高度重视算力网络一体化,并发布了相关实施意见。然而,算力网络存在云和网相对独立、跨云一体化资源调度困难等问题,智算服务也面临算力不足、能耗高、服务安全…...

3分钟快速解密网易云音乐NCM文件:ncmdump完整使用指南

3分钟快速解密网易云音乐NCM文件&#xff1a;ncmdump完整使用指南 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 你是否在网易云音乐下载了喜欢的歌曲&#xff0c;却无法在其他设备或播放器上欣赏&#xff1f;NCM加密格式限制了你的…...

开源对话模型MOSS:从本地部署到领域微调的完整实践指南

1. 项目概述&#xff1a;一个开源对话模型的深度探索最近在开源社区里&#xff0c;一个名为usemoss/moss的项目引起了我的注意。这不仅仅是一个普通的代码仓库&#xff0c;它背后代表的是一个由国内顶尖学术机构复旦大学自然语言处理实验室&#xff08;FudanNLP&#xff09;发布…...

巧用NumPy:处理不规则列索引的向量模计算

在数据处理和科学计算中,NumPy是一个不可或缺的工具。它的高效计算能力能够帮助我们快速处理大规模的数值数据。今天,我们要探讨一个有趣的问题:如何在NumPy数组中,根据一个不规则的列索引列表,计算每个行向量的模长。 问题描述 假设我们有一个NxM的数组my_arr,以及一个…...

搭建你的第一座“模型工厂”——5分钟部署开源大模型

用Ollama部署开源模型&#xff0c;整个过程不超过5分钟。但跑起来只是第一步——这篇还会带你做一件事&#xff1a;在同一台机器上部署两个不同尺寸的模型&#xff0c;跑同一组问题&#xff0c;填一份模型选型对比表。以后你做技术选型时&#xff0c;这一套方法直接复用。 3.1 …...

利用curl命令直接测试Taotoken大模型API连通性与功能

利用curl命令直接测试Taotoken大模型API连通性与功能 1. 准备工作 在开始测试前&#xff0c;请确保已获取有效的Taotoken API Key。登录Taotoken控制台&#xff0c;在「API密钥」页面可创建和管理密钥。同时确认已安装curl工具&#xff0c;主流Linux/macOS系统通常预装&#…...

数据分析 Agent 的陷阱:口径不一致如何用指标字典解决

数据分析 Agent 的陷阱:口径不一致如何用指标字典解决 本文适合数据产品经理、数据分析师、大模型应用开发者、企业数字化负责人阅读,全文约10200字,从业务痛点出发,系统讲解口径不一致的根源、危害,以及如何通过指标字典与数据分析Agent的深度融合彻底解决该问题,包含可…...

告别TP2912依赖?国产芯XS5013实战评测:安防摄像头ISP芯片选型避坑指南

XS5013实战评测&#xff1a;国产ISP芯片如何破解安防摄像头选型困局 当某国际大厂突然通知交期延长至52周时&#xff0c;我们研发部的会议室空气瞬间凝固。作为一家专注智能安防的中型方案商&#xff0c;仓库里TP2912的库存只够支撑三个月量产——这个真实发生在2022年Q4的供应…...

G-Helper开源神器:华硕笔记本性能掌控与硬件优化的终极解决方案

G-Helper开源神器&#xff1a;华硕笔记本性能掌控与硬件优化的终极解决方案 【免费下载链接】g-helper G-Helper is a fast, native tool for tuning performance, fans, GPU, battery, and RGB on any Asus laptop or handheld - ROG Zephyrus, Flow, Strix, TUF, Vivobook, Z…...

阿里云OSS Java SDK安全升级指南:从硬编码AK到环境变量,我这样管理敏感配置

阿里云OSS密钥管理进阶&#xff1a;从环境变量到企业级安全方案实战 在Java开发者的日常工作中&#xff0c;阿里云OSS作为对象存储服务被广泛使用。许多开发者最初接触OSS时&#xff0c;往往直接在代码中硬编码AccessKey进行身份验证——这就像把家门钥匙贴在门框上&#xff0c…...