浮点数的比较

news/2024/9/19 14:13:27/文章来源:https://www.cnblogs.com/DSCL-ing/p/18414584

浮点数与"零值"

精度损失:

浮点值与实际值不等,可能偏大可能偏小,都属于精度损失

  1. 验证浮点数是否存在精度损失
    精度损失1

验证浮点数的差值是否存在精度损失

精度损失2

浮点数直接比较验证

精度损失3
结论: 浮点数在进行比较时,绝对不能使用双等号==来进行比较. 浮点数本身有精度损失,进而导致结果可能有细微的差别.

如何进行浮点数比较

1. x - y == 0的条件是 |x - y| < 精度.
即 x - y > -精度 && x - y < 精度2.还可以使用fabs函数,C90,<math.h>, double fabs(double x); 返回x的绝对值.
即 fabs(x-y) < 精度
//--------------------------------------------------------------
//方法1,自定义精度
#include<stdio.h>
#include<math.h>#define EPSILON 0.0000000000000001 //自定义精度
int main()
{double x = 1.0;double y = 0.1;//验证x - 0.9 是否等于 0.1if(fabs((x-0.9)- y) < EPSILON ) printf("aaaa\n");else printf("bbbb\n");puts("hello world!");return 0;
}
//方法2:使用C语言提供的精度
#include<stdio.h>
#include<math.h>
#include<float.h>int main()
{double x = 1.0;double y = 0.1;//验证x - 0.9 是否等于 0.1//<float.h> 内置最小精度值 DBL_EPSILON 和 FLT_EPSILON ,1.0+DBL_EPSILON != 1.0 ,EPSILON是改变1.0的最小的值,数学概念,略if(fabs((x-0.9)- y) < DBL_EPSILON ) printf("aaaa\n");else printf("bbbb\n");return 0;
}

浮点比较方法1

浮点数与"零值"比较

只需要判定它是否小于EPSILON即可

int main()
{double x = 0.0;// double x  = 0.00000000000000000000000000001; //很小也可以认为等于0if(fabs(x) < DBL_EPSILON ) printf("等于0\n");else printf("不等于0\n");return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

白家强的第一次作业

一、自我介绍 大家好,我的名字是白家强,我来自河北邢台,我的家乡处于华北平原,在我的家乡有美丽的苞米地和一望无垠的大麦田。我现就读于浙江理工大学22级自动化(1)班,是一名大三的学生。在杭州上学的这两年中,遇到了许许多多的人,结识了许多好友,认识了很多老师,我…

Qt加载天地图离线api开发包/从官网趴地图js代码/费了九牛二虎之力终于搞定

一、前言说明 网上关于如何趴天地图离线api文件的文章,只有少量的两三篇,而且几乎没有说全和说对,搞得评论也是一片懵逼,这里不行那你不行,思路可以借鉴就是。索性花了点时间,自己研究了如何从官网一步步趴下来js文件,最终所有离线能使用的功能全部搞定,也根本不会有ht…

一键生成!轻量级 AI 证件照制作工具!

HivisionIDPhotos —— 一个轻量级的 AI 证件照制作工具,利用一套完善的模型工作流程,实现对多种用户拍照场景的识别、抠图与证件照生成。大家好,我是 Java陈序员。 在日常生活中,我们需要各式各样的证件照。有时候需要不同的尺寸,一寸、两寸、小二寸...而有的时候需要不同…

[问题排查]CPU占用过高

查看占用cpu高的进程 top 按P 如下图:可看出PID为7149的java进程占用cpu最高,达到了98%查看进程中最耗cpu的子线程 top -Hp 7149 如下图:可看出PID为7166的线程占用cpu最高,达到了97.7%将最耗cpu的线程id转换为16进制输出 perl printf "%x \n" 7166 查询具体出现…

白云龙期货投资-第八讲

假突破的深度分析 一 高低点 平台之假突破深度分析 二 趋势线假突破之深度分析 三 假突破实盘应变操作法 假突破之飘旗确认法 在上沿做旗形整理,假突破假突破之空间确认法盘久必跌 趋势线假突破之深度分析假突破实盘应变方法 一 任何突破后不要急于进场,要看下一步行情的反应…

章13——包装类——StringBuilder类

StringBuilder介绍其继承关系和 StringBuffer 是一样的。同 StringBuffer 一样,是在堆中(value[])而非在常量池中。 三种 String 的对比有关复用率高的解读:String 的内容在常量池中,相同内容的对象(或其在堆中的东西)都可以指向常量池中的同一个位置 效率问题:StringB…

章13——常用类——StringBuffer类

基本介绍即 StringBuffer 是存在堆中的而非常量池中的。(value 数组存放字符串内容) 与 String 的对比StringBuffer:不用每次更新地址,但当数组空间不够时,会扩大并且更新地址。 构造器StringBuffer stringBuffer = new StringBuffer();StringBuffer stringBuffer1 = new …

Windows的树形目录结构

一、文件、文件夹(目录)、逻辑盘、路径的概念文件:是操作系统用来存储和管理信息的基本单位文件夹也叫目录:是文件的集合体,文件夹中可包含多个文件,也可包含多个子文件夹。每个文件夹都有一个唯一的名称,用于在文件系统中标识和访问。逻辑盘,计算机的外存储器一…

高等数学 2.5 函数的微分

目录一、微分的定义二、微分的几何意义三、微分运算1、函数和、差、积、商的微分法则2、复合函数的微分法则四、微分在近似计算中的应用 一、微分的定义定义 设函数 \(y = f(x)\) 在某区间内有定义,\(x_0\) 及 \(x_0 + \Delta x\) 在这区间内,如果函数的增量 \[\Delta y = f(…

信息学奥赛初赛天天练-91-CSP-S2023基础题3-编译命令、树的重心、拓扑排序、进制转换、R进制转十进制、十进制转R进制

PDF文档公众号回复关键字:202409172023 CSP-S 选择题 1单项选择题(共15题,每题2分,共计30分:每题有且仅有一个正确选项) 11 以下哪个命令,能将一个名为 main.cpp 的 C++ 源文件,编译并生成一个名为 main 的可执行文件?( ) A g++ -o main main.cpp B g++ -o main.…

匀变速直线运动的规律

匀变速直线运动的规律 一、定义:匀变速直线运动为沿一条直线且加速度恒定不变的运动,在 \((v-t)\) 图中,其表示为一条倾斜的直线。二、关于字母的解释:\(v_0\) 表示初始速度,\(v_t\) 表示末速度,\(t\) 表示时间,\(a\) 表示加速度,\(s\) 代表位移。 三、关于匀变速直线运…

Java 性能调优:优化 GC 线程设置

垃圾回收器使用一组称为 GC 线程的线程来执行回收工作。有时 JVM 可能会分配过多或过少的 GC 线程。本文将讨论 JVM 为什么会出现这种情况、其影响以及可能的解决方案。 1 咋查找应用程序的 GC 线程数量 进行线程转储分析来确定应用程序的 GC 线程数量:从生产服务器捕获thread…