首页 > 其他分享 >2024/9/26

2024/9/26

时间:2024-09-26 21:05:12浏览次数:8  
标签:舍入 26 运算 二进制 浮点数 2024 精确 100

public class TestDouble {

public static void main(String args[]) {
    System.out.println("0.05 + 0.01 = " + (0.05 + 0.01));
    System.out.println("1.0 - 0.42 = " + (1.0 - 0.42));
    System.out.println("4.015 * 100 = " + (4.015 * 100));
    System.out.println("123.3 / 100 = " + (123.3 / 100));
}

}这个程序的输出
第一行:0.05 + 0.01 可能会输出 0.06000000000000001 而不是精确的 0.06
第二行:1.0 - 0.42 可能会输出 0.5799999999999999 而不是精确的 0.58
第三行:4.015 * 100 会正常输出 401.5
第四行:123.3 / 100 会正常输出 1.233
这些输出展示了在进行double类型运算时,由于二进制表示的限制,结果可能不会完全精确。

在计算机科学中,double 类型是一种用于表示浮点数的数据类型,它遵循 IEEE 754 标准。浮点数的表示和运算之所以不能总是得到“数学上精确”的结果,主要是由于以下几个原因:

二进制表示的限制:计算机使用二进制(基数为2)来存储和处理数字,而许多十进制(基数为10)的小数无法精确地转换为二进制表示。例如,十进制的0.1在二进制中是一个无限循环小数,无法用有限的位数精确表示。

有限的位数:double 类型在计算机中通常使用64位(8字节)来表示,包括符号位、指数位和尾数位(有效数字位)。即使有这么多位,仍然只能近似表示某些小数值。

舍入误差:在进行浮点数运算时,由于不能精确表示所有的小数,计算机必须在某些时候进行舍入。这种舍入可能会在连续的计算中累积,导致最终结果与预期有偏差。

运算顺序:在数学中,加法和乘法是可交换和可结合的,但在计算机中,由于精度限制,不同的运算顺序可能会导致不同的结果。

舍入模式:IEEE 754标准定义了多种舍入模式,不同的编程语言或平台可能采用不同的舍入模式,这也会影响最终的计算结果。

非标准化的数值:某些数值在二进制表示中是特殊的,比如“非数”(NaN)和“无穷大”(Infinity),这些数值在运算时可能会产生不可预测的结果。

为了减少浮点数运算中的精度问题,可以采取以下措施:

使用更高精度的数据类型,如Java中的BigDecimal类,它提供了更精确的小数运算。
避免进行可能导致大量舍入误差的连续运算。
在比较浮点数时,使用一个小的容差值来判断它们是否“足够接近”。
了解并使用适当的舍入模式。
在处理财务或科学计算时,精度尤其重要,因此在这些领域通常会使用更精确的数值表示和运算方法。

标签:舍入,26,运算,二进制,浮点数,2024,精确,100
From: https://www.cnblogs.com/FuFfu/p/18434344

相关文章

  • BOI 2024 Day1
    LuoguP10759题目描述你有\(N\)个一次性的工作,完成第\(i\)个工作可以获得\(x_i\)的利润(可能为负)。有些工作依赖于其他工作,第\(i\)个工作必须在第\(p_i\)个工作完成之后进行。若\(p_i=0\),则\(i\)没有依赖。你初始有\(S\)元,求你最多能获得多少元。思路在一个点......
  • 11-12-13 926
      这段文本讨论了文明社会中人们应有的自律性,以及缺乏自律可能导致的问题。以下是详细解释:###英文原文整理:1.Andthis,inmyopinion,ishowthingsshouldbeinacivilizedsociety.2.Butpeoplewhohavebeenliberatedfromtheharshdisciplineofcir......
  • 2024.9.26 ThreadLocal
    在使用ThreadLocal的情况下,并发量很高时不会产生冲突,原因如下:1.线程隔离:ThreadLocal为每个线程提供独立的存储空间。每个线程都可以安全地设置和获取其自己的变量值,而不会影响其他线程。即使在高并发环境下,线程间的数据是隔离的。2.并发安全:ThreadLocal本身是线程安......
  • 9.26每日总结
    给出SpringbootCloud的server:port:8084spring:application:name:user-serviceprofiles:active:devdatasource:url:jdbc:mysql://${hm.db.host}:3306/hm-user?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=......
  • [2027届]NOIP2024模拟赛#6
    全真模拟赛。1:30开考。看了T1,发现\(O(m\logn)\)的暴力很好写,直接50pts到手。然后发现每次不用一个一个改,而且改完以后可以直接区间改,但是一直没有找到合适的东西维护复杂度。往下翻了翻数据发现\(2\)的整次幂这个性质很好写,但是写挂了。此时时间已经过去了1.5h,于是......
  • 喜讯 | 宝兰德「应用服务器软件 V9.5」荣获“2024年度优秀软件产品”殊荣
    近日,中国软件行业协会公布了“2024年度推广优秀软件产品”名单。经过专家委员会的评议及最终审核,宝兰德凭借领先的技术能力和丰富的经验积累,中间件核心产品「应用服务器软件V9.5」获评“2024年度优秀软件产品”。本次评选活动由中国软件行业协会发起,从自主创新、技术水平、产品质......
  • 2024.9.26 计划
    项目下午读论文,用gpt搞懂怎么实时生成热力图,以及如何叠加信号学习上午ROS学习下午-晚上DP总结ROS学习-进程通信(接昨天)遇到了问题:Invoking"makecmake_check_build_system"failed解决方式:功能包里不能有重复名称的节点,检查工作区中是否有其他CMakeLists.txt文......
  • 龙芯3A6000+loongnix20.6操作系统安装idea社区版2024和docker
    龙芯3A6000+loongnix20.6操作系统安装idea社区版和docker1.搭建目标:安装jdk8安装idea社区版-2024(需要jdk17)安装docker(可选)配置docker自动补全(可选)如何使用docker拉取镜像(可选)2.配置说明主机:中科云3A6000NUC操作系统:loonignix-20.63.安装jdk3.1安装jdk8打开桌......
  • 20240926测试
    a题面:有一个\(n\timesm\)的\(01\)矩阵,求其中\(1\)的个数在\([l,r]\)的子矩阵数量题解:令\(f_k\)为\(1\)的个数\(\lek\)的子矩阵数量,答案为\(f_r-f_{l-1}\)。\(n\)较小,暴力枚举上下区间,在内用双指针维护和小于等于\(k\)的段,复杂度\(\text{O}(n^2m)\)。......
  • STM32F103C8T6+ESP8266+MQTT+EMQX完成数据上传和点灯环节
    本文参考以下文章:【最简单】STM32+ESP8266+MQTT+EMQX完成数据上传和点灯环节_stm32如何连接emqx-CSDN博客STM32+ESP8266通过MQTT协议连接本地EMQX(保姆级教学!资料开放!)_stm32驱动esp8266本地emqx-CSDN博客 一、在windows环境下或Ubuntu搭建EMQX云平台 参看这篇文章:搭建自己的M......