首页 > 其他分享 >浮点数的比较

浮点数的比较

时间:2024-09-17 20:02:01浏览次数:8  
标签:fabs EPSILON 浮点数 printf double 比较 精度

浮点数与"零值"

精度损失:

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

  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.1
    if(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; //很小也可以认为等于0
    if(fabs(x) < DBL_EPSILON ) printf("等于0\n");
    else printf("不等于0\n");
    
    return 0;
}

标签:fabs,EPSILON,浮点数,printf,double,比较,精度
From: https://www.cnblogs.com/DSCL-ing/p/18414584

相关文章

  • LVS三种负载均衡模式的比较
    文章目录三种模式对比三种模式对比LVS-NATLVS-DRLVS-TUN服务器操作系统可以使用任何支持TCP/IP的操作系统大多数常见的操作系统都可以使用需要支持IP隧道技术的操作系统服务器网络需要私有网络,所有真实服务器(RS)必须位于同一局域网内同样需要局域网,但RS可以使用公网......
  • 【高中数学/对数函数/大小比较】设a=2/ln2,b=3/ln3,c=e,则a,b,c的大小关系为?
    【问题】设a=2/ln2,b=3/ln3,c=e,则a,b,c的大小关系为?【出处】《高考数学极值解题大招》P38第9题中原教研工作室编著【解答】e=3/lne,故三者的共同的构造函数为f(x)=x/lnx了解了单调性就好解题。f'(x)=(lnx-1)/(lnx)^2 由此可知x=e时,f'(x)=0;x>e时,f'(x)>0;x<e时,f'(x)<0.故x=e是f......
  • 深入了解Python中的浮点数、自动转换、强制转换与增强赋值运算符
    本套课程在线学习视频https://pan.quark.cn/s/3a470a7bbe67Python是一种强类型语言,具有动态类型和自动内存管理的特性。在数学和科学计算中,浮点数(float)是非常重要的数据类型。本文将详细探讨浮点数的概念、自动转换、强制转换以及增强赋值运算符。通过详细的代码示例和运行结果,帮......
  • 【计算机组成原理】浮点数的表示及IEEE 754规格化
    ......
  • Cesium 比较常用的几个方法
    根据经纬度获取高程/***根据经纬度获取高程*@param{mars3d.Map}map*@param{number}lng*@param{number}lat*/asyncfunctiongetHeightByLngLat(map,lng,lat){if(!lng||!lat)returnundefined;letpositions=[Cesium.Carto......
  • 推荐一个比较好用的工具Microsoft PowerToys
    MicrosoftPowerToys是一组实用工具,可帮助高级用户调整和简化其Windows体验,从而提高工作效率。虽然刚刚使用这个工具不久,但是已经能初步感受到它的强大,接下来我就对于我使用的几个功能进行简单介绍。屏幕截取这个功能在日常工作中应该是经常会用到,在学生时代,使用这个功能......
  • YAML 与 JSON、XML 比较及 YAML 使用最佳实践
    YAML(YAMLAin'tMarkupLanguage的递归缩写)是一种人类可读的数据序列化格式,通常用于配置文件、数据交换和设置管理。它简洁且易于读写,尤其适合在编程语言之间传递配置数据。以下是一些YAML的基本概念和语法示例:基本语法键值对:name:JohnDoeage:30嵌套:person:name:JohnDoe......
  • 文心智能体平台、Coze、腾讯元器、ModelScopeGPT和星火大模型的比较,你选哪个?
    平台文心智能体平台(百度)Coze(字节跳动)腾讯元器(腾讯)ModelScopeGPT(阿里云)星火大模型(科大讯飞)背景与开发方百度,中国领先的搜索引擎和AI公司字节跳动,全球知名的互联网科技公司腾讯,中国领先的互联网综合服务提供商阿里云,阿里巴巴集团旗下的云计算服务提供商科大讯飞,中国领先......
  • Mybatis与Mybatis-plus的比较
    MyBatis和MyBatis-Plus都是流行的JavaORM框架,它们在处理数据库操作时各有优势和特点。以下是对两者的比较:MyBatisMyBatis是一个成熟的ORM框架,它提供了映射SQL语句到Java对象的能力。以下是MyBatis的一些优缺点:优点:灵活性高:MyBatis允许开发者编写原生SQL,提......
  • Java 假设有一个对象list 有4列,4和3比较name 如果name不相同则记录4的version值string
    可以使用传统循环或Java8的流(Stream)API来实现这一逻辑。以下是这两种方法的示例代码:1.使用传统循环importjava.util.List;publicclassMain{publicstaticvoidmain(String[]args){List<MyObject>list=...;//初始对象列表String......