C语言之判断浮点数

目录

一 简介

二 代码实现

A.方法一

B.方法二

二 时空复杂度

A.方法一

B.方法二


一 简介

在C语言中,判断浮点数的算法通常涉及到比较两个浮点数是否相等或比较它们的大小。由于浮点数运算存在精度误差问题,直接使用 ==!= 进行比较可能会导致不准确的结果。因此,一般采用近似比较方法来判断浮点数的相等性或大小关系。

二 代码实现

A.方法一

以下是一个简单的示例,用于判断一个浮点数是否接近于零:

#include <stdio.h>
#include <math.h> // 需要包含这个头文件以使用fabs函数bool isZero(double x, double epsilon) {return fabs(x) < epsilon;
}int main() {double num = 0.000001;double epsilon = 1e-6; // 定义一个足够小的阈值if (isZero(num, epsilon)) {printf("%f 可以认为是近似为0的浮点数\n", num);} else {printf("%f 不是近似为0的浮点数\n", num);}return 0;
}

B.方法二

对于比较两个浮点数的大小,也可以采取类似的策略,通过计算两个数之差的绝对值与一个很小的阈值(epsilon)进行比较:

#define EPSILON 1e-7 // 设置一个精度阈值bool areAlmostEqual(double a, double b) {return fabs(a - b) < EPSILON;
}bool isFirstLessThanSecond(double a, double b) {return a < b && fabs(a - b) > EPSILON;
}bool isFirstGreaterThanSecond(double a, double b) {return a > b && fabs(a - b) > EPSILON;
}// 在main函数中使用上述函数进行浮点数比较

当然,在实际应用中,选择合适的阈值(epsilon)是非常重要的,它应该根据具体应用场景和浮点数的精度要求来确定。此外,当需要处理特殊情况,例如判断浮点数是否为NaN(非数字)或无穷大时,可以使用标准库提供的函数如 isnan() 和 isinf()。

二 时空复杂度

A.方法一

该算法实现了一个名为 isZero 的函数,用于判断一个浮点数是否近似为零。在给出的代码中:

  • 时间复杂度:isZero 函数的时间复杂度是 O(1) 或常数时间复杂度。这是因为调用 fabs 函数计算绝对值并进行比较的操作次数固定,不随输入参数 xepsilon 的大小变化而变化。

  • 空间复杂度:同样地,该算法的空间复杂度也是 O(1)。它没有使用与输入规模相关的额外空间,仅涉及了临时存储变量 xepsilon,以及调用 fabs 函数时可能需要的内部临时变量,但这些都属于固定开销,不会随着输入数据量增大而增加。

因此,这个算法在时间和空间上的资源消耗都是恒定的,非常高效。

B.方法二

该算法实现了三个函数,用于判断两个浮点数是否近似相等、第一个数是否小于第二个数(且两者不相等)以及第一个数是否大于第二个数(且两者不相等)。对于每个函数的时间复杂度和空间复杂度:

  • 时间复杂度:每个函数的时间复杂度都是 O(1) 或常数时间复杂度。这是因为无论输入的浮点数 ab 的值如何,都需要执行一次减法运算(a - b),一次绝对值函数调用(fabs(a - b)),以及一到两次比较操作。这些操作次数固定不变。

  • 空间复杂度:同样地,这三个函数的空间复杂度也都是 O(1)。它们在运行过程中没有使用与输入规模相关的额外存储空间,仅涉及了临时存储变量 ab 以及调用 fabs 函数时可能需要的内部临时变量,但这些都属于固定开销,并不会随着输入数据量增大而增加。

总结来说,这三个函数在时间和空间上的资源消耗都很小,具有较高的效率,适合进行浮点数的近似比较。

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

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

相关文章

如何搭建一个 tts 语言合成模型

搭建一个文本到语音&#xff08;TTS&#xff09;模型是一个涉及多个步骤的过程&#xff0c;包括数据准备、模型选择、训练、评估和部署。以下是一个简化的指南&#xff0c;介绍如何搭建一个基本的TTS模型&#xff1a; 1. 数据准备 数据收集&#xff1a;获取大量的文本和相应的…

HTML选择文件的实时预览

HTML选择文件的实时预览 目录 HTML选择文件的实时预览HTML代码JS代码预览 HTML代码 <input type"file" id"adv_img_input" style"width: 1000px ;height:30px"> <img src"#"id"adv_img">JS代码 <script>…

OpenAI引领下一代AI技术,推出GPT-4 Turbo

OpenAI引领下一代AI技术&#xff1a;GPT-4 Turbo 摘要 OpenAI最近对其GPT-4和GPT-3.5语言模型进行了一系列改进&#xff0c;推出了GPT-4 Turbo&#xff0c;这是AI交互和计算语言学领域的一次重大突破。GPT-4 Turbo拥有更广泛的知识库和更大的上下文窗口&#xff0c;能够更准确…

配置OGG 如何批量修改源端及目标端序列值_满足客户变态需求学会这招你就赚了

欢迎您关注我的公众号【尚雷的驿站】 **************************************************************************** 公众号&#xff1a;尚雷的驿站 CSDN &#xff1a;https://blog.csdn.net/shlei5580 墨天轮&#xff1a;https://www.modb.pro/u/2436 PGFans&#xff1a;ht…

WanAndroid(鸿蒙版)开发的第三篇

前言 DevEco Studio版本&#xff1a;4.0.0.600 WanAndroid的API链接&#xff1a;玩Android 开放API-玩Android - wanandroid.com 其他篇文章参考&#xff1a; 1、WanAndroid(鸿蒙版)开发的第一篇 2、WanAndroid(鸿蒙版)开发的第二篇 3、WanAndroid(鸿蒙版)开发的第三篇 …

2024年3月GESP认证Scratch图形化编程四级真题及答案

GESP 图形化四级试卷 &#xff08;满分&#xff1a;100 分 考试时间&#xff1a;120 分钟&#xff09; 学校&#xff1a; 姓名&#xff1a; ​ 一、单选题&#xff08;共 10 题&#xff0c;每题 2 分&#xff0c;共 30 分&#xff09; 题号 1 2 3 4 5 6 7 8 9 10 11 1…

通信协议如何连接代码-自动窗帘系统

要将自动窗帘系统的代码与硬件通过通信协议连接起来&#xff0c;你需要确保硬件支持相应的通信接口和协议。以下是一个一般性的步骤概述&#xff0c;帮助你理解如何实现这一过程&#xff1a; (1)选择通信协议&#xff1a; 首先&#xff0c;确定你的硬件支持的通信协议。常见的通…

【开源】SpringBoot框架开发学生综合素质评价系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 学生功能2.2 教师功能2.3 教务处功能 三、系统展示四、核心代码4.1 查询我的学科竞赛4.2 保存单个问卷4.3 根据类型查询学生问卷4.4 填写语数外评价4.5 填写品德自评问卷分 五、免责说明 一、摘要 1.1 项目介绍 基于J…

数字化转型导师坚鹏:人工智能在金融机构数字化转型中的应用

人工智能在金融机构数字化转型中的应用 课程背景&#xff1a; 金融机构数字化转型离不开人工智能&#xff0c;在金融机构数字化转型中&#xff0c;人工智能起到至关重要的作用&#xff0c;很多机构存在以下问题&#xff1a; 不清楚人工智能产业对我们有什么影响&#xff1f;…

考研数学|概率应该怎么学?

考研概率论老师很多&#xff0c;但是我最推荐两个老师&#xff0c;李良和方浩 我认为李良概率论基础讲解相比于其他老师最大的优点就是&#xff0c;每一步都会耐心解释其中的逻辑。很少会像方浩老师那样过于跳跃或者频繁串联&#xff0c;这点对于零基础思维转换慢的人来说&…

Transformer self-attention源码及原理理解

自注意力计算公式&#xff1a; 在公式(1)中Q(query)是输入一个序列中的一个token&#xff0c;K(key)代表序列中所有token的特征。 可以得到当前token与序列中其他token的相关性。在论文原文中512&#xff0c;表示每个token用512维特征表示&#xff08;序列符号的embedding长度…

C语言中大小写字母如何转化

&#x1f31f; 前言 欢迎来到我的技术小宇宙&#xff01;&#x1f30c; 这里不仅是我记录技术点滴的后花园&#xff0c;也是我分享学习心得和项目经验的乐园。&#x1f4da; 无论你是技术小白还是资深大牛&#xff0c;这里总有一些内容能触动你的好奇心。&#x1f50d; &#x…

Linux TCP参数——tcp_adv_win_scale

文章目录 tcp_adv_win_scaleip-sysctl.txt解释buffering overhead内核缓存和应用缓存示例计算深入理解从2到1(tcp_adv_win_scale的值)总结 tcp_adv_win_scale adv-advise&#xff1b;win-window; 用于指示TCP中接收缓存比例的值。 static inline int tcp_win_from_space(int …

【字符串算法题】541. 反转字符串 II

题目链接 思考 把字符串以2k的步长分成count_reverse个子区间。考虑最后一个子区间的字符数量&#xff1a;1&#xff09;如果大于等于k&#xff0c;则它要和前面的子区间一样&#xff0c;要对区间内的前k个字符进行反转&#xff1b;2&#xff09;如果小于k&#xff0c;则它的…

SpringSecurity(SpringBoot2.X版本实现)

资料来源于 SpringSecurity框架教程-Spring SecurityJWT实现项目级前端分离认证授权 侵权删 目录 介绍 快速开始 认证 认证流程 登录校验流程 SpringSecurity完整流程 认证流程详解 代码实现 准备工作 mysql mybatis-plus redis 统一返回类 核心代码 密码加密存…

Mesh网格obj文件构成解析

众所周知&#xff0c;Mesh网格是三维重建的常用手法&#xff0c;通过顶点-三角面的形式来完成对三维物体的表达。其中&#xff0c;最常见的Mesh网格文件格式就是obj格式。看起来复杂的三维形状其实在数值表示上是很简单的&#xff0c;大家跟我一起来做个小实验就好&#xff1a;…

echarts散点图自定义tooltip,鼠标放上去展示多行数据

先放效果图 如图&#xff0c;就是鼠标悬停在散点上&#xff08;这里的散点我替换成了图片&#xff0c;具体做法参考这篇文章&#xff1a;echarts散点图的散点用自定义图片替代-CSDN博客&#xff09;时&#xff0c;可以展示多行数据。之前查找资料的时候&#xff0c;很多用字符串…

【兆易创新GD32H759I-EVAL开发板】 LUT功能

颜色查找表&#xff08;LUT, Lookup Table&#xff09;模式在图像处理和显示中是一种有效的数据表示和压缩方式。它通过将图像中的颜色映射到一个预定义的颜色表来实现&#xff0c;这样每个像素不是直接存储完整的颜色值&#xff0c;而是存储一个指向颜色表中特定颜色的索引。这…

练习unittest+Fixture实现

练习01 创建⼀个⽬录 case, 作⽤就是⽤来存放⽤例脚本,在这个⽬录中创建 5 个⽤例代码⽂件 , test_case1.py使⽤ TestLoader 去执⾏⽤例 将来的代码 ⽤例都是单独的⽬录中存放的 test_项⽬_模块_功能.py test_case1.py # 1. 导包 unittest import unittest # 2. 定义测试类, 只…

面试经典150题(114-118)

leetcode 150道题 计划花两个月时候刷完之未完成后转&#xff0c;今天完成了5道(114-118)150 gap 了一周&#xff0c;以后就不记录时间了。。 114.(70. 爬楼梯) 题目描述&#xff1a; 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不…