浮点数的比较

news/2024/9/23 1:23:39

浮点数与"零值"

精度损失:

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

  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.ryyt.cn/news/61404.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

白家强的第一次作业

一、自我介绍 大家好,我的名字是白家强,我来自河北邢台,我的家乡处于华北平原,在我的家乡有美丽的苞米地和一望无垠的大麦田。我现就读于浙江理工大学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的树形目录结构

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