C语言从头学58——学习头文件math.h(一)
math.h 头文件提供了很多数学计算方面的函数。
一、使用数学函数前需要了解的两个类型、两个宏
1、float_t:当前系统能够有效执行float运算的类型,宽度不少于float。
2、double_t:当前系统能够有效执行double运算的类型,宽度不少于double。
(使用系统的float_t、double_t的宽度见例子)
3、INFINITY:该宏表示正无穷(表示计算出来的结果太大无法显示)
4、NAN :该宏表示非数字(表示计算出来的结果不能用数字表示)
二、数学函数计算过程中发生错误时报错类型方式:
Range errors:函数返回类型无法表示运算结果
Domain errors:函数参数错误
Pole errors:参数导致函数的极限值变成无限
Overflow errors:运算结果太大向上溢出
Underflow errors:运算结果太小向下溢出
三、判断参数是否存在错误的几个函数
1、fpclassify(参1);
参数: 参1:int、float、double等类型的值或表达式
返回值:
a.当参数(值或表达式)为正无穷大或负无穷大时返回FP_INFINITE
b.当参数不是数字时返回FP_NAN
c.当参数为零时返回FP_ZERO
d.当参数为正或负非正常值时返回FP_SUBNORMAL
e.当参数为非零的、正常值时返回FP_NORMAL
2、isfinite(参1);
参数:参1:int、float、double等类型的值或表达式
返回值:如果参数不是无限或 NAN,返回1(真),否则返回0。
3、isinf(参1);
参数:参1:int、float、double等类型的值或表达式
返回值:如果参数是正无穷或负无穷,返回1(真),否则返回0。
4、isnan(参1);
参数:参1:int、float、double等类型的值或表达式
返回值:如果参数不是数字,返回1(真),否则返回0。
5、isnormal(参1);
参数:参1:int、float、double等类型的值或表达式
返回值:如果参数是正常数字,返回1(真),否则返回0。
说明:
a.使用以上一个或几个函数特别是第1个函数,对数学函数的参数进行一下检验,再正式
调用数学函数,可以避免出现计算错误。
b.现在的编译器很聪明,等不到程序发现错误编译器就提前发现了。
6、signbit(参1);
参数:参1:int、float、double等类型的值或表达式
返回值:如果参数为负值返回非0数,否则返回0。
四、很多数学函数的返回值是 double 类型,但是同时提供 float 类型与long double类型的版本,这种版本就是在函数名后边加上f或者l,函数是否有这种版本,一试便知。acos()函数,还同时存在acosf()和acosl()。
五、验证程序:
#include<stdio.h>
#include<math.h>
char* myFpclassify(double x)
{switch (fpclassify(x)) {case FP_INFINITE:return "参数为正无穷大或符无穷大";break;case FP_NAN:return "参数不是数字\n";break;case FP_ZERO:return "参数是零";break;case FP_SUBNORMAL:return "参数不是正常数字";break;case FP_NORMAL:return "参数是正常数字";break;default:return "参数无法判断";}
}
int main()
{ //float_t、double_t的宽度printf("float_t sizeof:%d\n", (int)sizeof(float_t));//运行结果:float_t sizeof:4printf("float sizeof:%d\n", (int)sizeof(float));//运行结果:float sizeof:4printf("double_t sizeof:%d\n", (int)sizeof(double_t));//运行结果:double_t sizeof:8printf("double sizeof:%d\n", (int)sizeof(double));//运行结果:double sizeof:8printf("INFINITY:%f\n", INFINITY);//运行结果:INFINITY:infprintf("NAN:%f\n", NAN); //运行结果:NAN:nan
//实验fpclassify函数char* s = myFpclassify(1.0 / 1.2e300); //运行结果:参数是正常数字printf("%s\n", s);s = myFpclassify(0.0 / 1.2e300); //运行结果:参数是零printf("%s\n", s);
//实验signbit函数printf("-3.14signbit:%d 3.14signbit:%d\n", signbit(-6.28), signbit(3.14));//运行结果: -3.14signbit:32768 3.14signbit:0
//数学函数版本printf("acos(0.145)=%.10f\n",acos(0.145));//运行结果:acos(0.145)=1.4252833543printf("acosf(0.145)=%.10f\n",acosf(0.145));//运行结果:acosf(0.145) = 1.4252833128printf("acosl(0.145)=%.10f\n",acosl(0.145));//运行结果:acosl(0.145) = 1.4252833543getchar();return 0;
}
相关文章:
C语言从头学58——学习头文件math.h(一)
math.h 头文件提供了很多数学计算方面的函数。 一、使用数学函数前需要了解的两个类型、两个宏 1、float_t:当前系统能够有效执行float运算的类型,宽度不少于float。 2、double_t:当前系统能够有效执行double运算的类型,宽度不…...
前端JS常见面试题
数据双向绑定 Bug解决 集成工作涉及 版本node 依赖包报错 版本问题!!!ElementUI、Cesium、ant-design 配置、代码和其他 混入 在Vue中,混入(Mixins)是一种非常有用的功能,它允许你创建可复…...
利用深度学习实现验证码识别-4-ResNet18+imagecaptcha
在当今的数字化世界中,验证码(CAPTCHA)是保护网站免受自动化攻击的重要工具。然而,对于用户来说,验证码有时可能会成为一种烦恼。为了解决这个问题,我们可以利用深度学习技术来自动识别验证码,从…...
IDC基础学习笔记
一、数据中心介绍 1、数据中心级别划分: 2、数据中心结构: 3、IT系统组成 二、数据中心硬件知识 1、服务器组件 服务器的正面接口: 服务器的反面接口: (1)CPU CPU定义:中央处理器(…...
Mysql基础练习题 1527.患某种疾病的患者 (力扣)
查询患有 I 类糖尿病的患者 ID (patient_id)、患者姓名(patient_name)以及其患有的所有疾病代码(conditions)。I 类糖尿病的代码总是包含前缀 DIAB1 。 题目链接: https://leetcode.cn/proble…...
Mysql链接异常 | [08001] Public Key Retrieval is not allowed
Datagrid报错 [08001] Public Key Retrieval is not allowed 这个错误通常是由于 MySQL 8.0 中的新特性导致的。默认情况下,MySQL 8.0 使用 caching_sha2_password 作为认证插件,而你需要在连接 URL 中明确允许公钥检索或者使用老版本的认证方式 mysql…...
vue3项目中如何动态循环设置ref并获取使用
前言:vue2可通过ref来获取当前的dom,但是vue3有个问题,就是必须定义ref的变量名,才能使用;倘若有多个ref,一个个去定义未免过于繁琐,还有一种情况就是dom是使用v-for循环出来的,那么…...
stm32之SPI通信协议
文章目录 前言一、SPI通信协议1.1 SPI简介1.2 SPI通信特点1.3 SPI与I2C对比 二、SPI硬件电路三、SPI通信原理四、SPI时序单元4.1 起始和终止条件4.2 交换一个字节(模式1)4.3 交换一个字节(模式0)4.4 交换一个字节(模式2和3) 五、SPI时序5.1 发送指令5.2 指定地址写5.3 指定地址…...
Unity 摄像机(Camera)详解
文章目录 0.前言1.相机属性介绍2.Unity 中多个相机画面堆叠显示2.1 3D 摄像机2.2 UI 摄像机2.3 摄像机的Culling Mask设置 0.前言 本文介绍的是使用Unity默认的内置渲染管线下的Camera组件,使用URP或HDRP则不同。 1.相机属性介绍 Clear Flags: 清除标记…...
数学基础 -- 线性代数之LU分解
LU分解 LU分解(LU Decomposition)是线性代数中非常重要的一种矩阵分解方法。它将一个方阵分解为一个下三角矩阵(L矩阵)和一个上三角矩阵(U矩阵)的乘积。在数值线性代数中,LU分解广泛用于求解线…...
高职人工智能训练师边缘计算实训室解决方案
一、引言 随着物联网(IoT)、大数据、人工智能(AI)等技术的飞速发展,计算需求日益复杂和多样化。传统的云计算模式虽在一定程度上满足了这些需求,但在处理海量数据、保障实时性与安全性、提升计算效率等方面…...
【Java】SpringCloud中使用set方法报错空指针
前言:今天在交流群中看见了一个空指针报错,想着哪里为空点过去看看为什么赋不上值就行,没想到啪啪打脸了,今天总结一下。 以下是他的RedisTempate注入和方法 可以看到,89行报错空指针。先分析一下, ①赋值…...
芯片杂谈 -- 常聊的内核包含哪些模块
目录 1. R52内核速览 2. 处理器模块详解 3.内核的功能安全测什么? 4.小结 最开始接触到汽车MCU大都来自NXP、Infineon、Renesas,例如MPC5748、TC275、RH850 P1X等等; 而各大OEM、供应商等等发布的JD通常都会要求熟悉AURIX、PowerPC、G3K…...
运维问题0002:SAP多模块问题-SAP系统程序在执行时,跳出“加急快件”窗口,提示:快件文档“更新已终止”从作者***收到
1、问题描述 近期收到2起业务报障,均反馈在SAP执行程序时,弹出“加急快件”窗口,导致操作的业务实际没有更新完成。 1)业务场景一:设备管理部门在操作事务代码:AS02进行资产信息变更时,保存正常…...
深度解析RAG:你必须要了解的RAG优化方法
RAG(Retrieval-Augmented Generation)是一种结合检索和生成能力的技术框架,旨在通过从外部知识库中检索相关信息来增强生成模型的输出。其基本思想是利用大型语言模型(LLM)的生成能力,同时通过检索机制获取…...
深度学习驱动下的字符识别:挑战与创新
一、引言 1.1 研究背景 深度学习在字符识别领域具有至关重要的地位。随着信息技术的飞速发展,对字符识别的准确性和效率要求越来越高。字符识别作为计算机视觉领域的一个重要研究方向,其主要目的是将各种形式的字符转换成计算机可识别的文本信息。近年…...
使用 JAXB 将内嵌的JAVA对象转换为 xml文件
使用 JAXB 将内嵌的JAVA对象转换为 xml文件 1. 需求2. 实现(1)FileDesc类(2)MetaFileXml类(3)生成对应的xml文件 1. 需求 获取一个目录下所有文件的元数据信息(文件名、大小、后缀等࿰…...
若依项目后台启动报错: [网关异常处理]、503
拉取代码启动项目,网关控制台报错: 21:31:59.981 [boundedElastic-7] WARN o.s.c.l.c.RoundRobinLoadBalancer - [getInstanceResponse,98] - No servers available for service: ruoyi-system 21:31:59.981 [boundedElastic-7] ERROR c.r.g.h.Gateway…...
【C++ Qt day10】
2、 完善对话框,点击登录对话框,如果账号和密码匹配,则弹出信息对话框,给出提示”登录成功“,提供一个Ok按钮,用户点击Ok后,关闭登录界面,跳转到其他界面 如果账号和密码不匹配&am…...
GO HTTP库使用
Go的 net/http 包是一个强大且易于使用的库,用于构建HTTP服务器和客户端。通过它,你可以轻松实现HTTP请求的处理、路由、静态文件服务等功能。下面重点以及一个简单的Demo示例。 文章目录 1. **基础HTTP服务器**2. **处理请求与响应**3. **路由与处理器*…...
网络编程(Modbus进阶)
思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...
基于matlab策略迭代和值迭代法的动态规划
经典的基于策略迭代和值迭代法的动态规划matlab代码,实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...
关键领域软件测试的突围之路:如何破解安全与效率的平衡难题
在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件,这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下,实现高效测试与快速迭代?这一命题正考验着…...
Netty从入门到进阶(二)
二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架,用于…...
解析奥地利 XARION激光超声检测系统:无膜光学麦克风 + 无耦合剂的技术协同优势及多元应用
在工业制造领域,无损检测(NDT)的精度与效率直接影响产品质量与生产安全。奥地利 XARION开发的激光超声精密检测系统,以非接触式光学麦克风技术为核心,打破传统检测瓶颈,为半导体、航空航天、汽车制造等行业提供了高灵敏…...
Vue 模板语句的数据来源
🧩 Vue 模板语句的数据来源:全方位解析 Vue 模板(<template> 部分)中的表达式、指令绑定(如 v-bind, v-on)和插值({{ }})都在一个特定的作用域内求值。这个作用域由当前 组件…...
轻量级Docker管理工具Docker Switchboard
简介 什么是 Docker Switchboard ? Docker Switchboard 是一个轻量级的 Web 应用程序,用于管理 Docker 容器。它提供了一个干净、用户友好的界面来启动、停止和监控主机上运行的容器,使其成为本地开发、家庭实验室或小型服务器设置的理想选择…...
大数据驱动企业决策智能化的路径与实践
📝个人主页🌹:慌ZHANG-CSDN博客 🌹🌹期待您的关注 🌹🌹 一、引言:数据驱动的企业竞争力重构 在这个瞬息万变的商业时代,“快者胜”的竞争逻辑愈发明显。企业如何在复杂环…...
Ray框架:分布式AI训练与调参实践
Ray框架:分布式AI训练与调参实践 系统化学习人工智能网站(收藏):https://www.captainbed.cn/flu 文章目录 Ray框架:分布式AI训练与调参实践摘要引言框架架构解析1. 核心组件设计2. 关键技术实现2.1 动态资源调度2.2 …...
21-Oracle 23 ai-Automatic SQL Plan Management(SPM)
小伙伴们,有没有迁移数据库完毕后或是突然某一天在同一个实例上同样的SQL, 性能不一样了、业务反馈卡顿、业务超时等各种匪夷所思的现状。 于是SPM定位开始,OCM考试中SPM必考。 其他的AWR、ASH、SQLHC、SQLT、SQL profile等换作下一个话题…...
