当前位置: 首页 > news >正文

C 标准库 - <float.h>

简介

C 标准库的 <float.h> 头文件包含了一组与浮点值相关的依赖于平台的常量。这些常量由 ANSI C 提出,使得程序更具可移植性。在讲解这些常量之前,我们先了解一下浮点数的组成部分:

  • S:符号 ( +/- )
  • b:指数表示的基数,2 表示二进制,10 表示十进制,16 表示十六进制,等等…
  • e:指数,一个介于最小值 emin 和最大值 emax 之间的整数。
  • p:精度,基数 b 的有效位数

基于以上 4 个组成部分,一个浮点数的值可以表示为:

floating-point = ( S ) p x b^e

或者

floating-point = (+/-) precision x base^exponent

库宏

下面的值是特定实现的,且是通过 #define 指令来定义的,这些值都不得低于下边所给出的值。请注意,所有的实例 FLT 是指类型 floatDBL 是指类型 doubleLDBL 是指类型 long double

FLT_ROUNDS

定义浮点加法的舍入模式,它可以是下列任何一个值:

  • -1:无法确定
  • 0:趋向于零
  • 1:去最近的值
  • 2:趋向于正无穷
  • 3:趋向于负无穷
#include <stdio.h>
#include <float.h>int main() {printf("FLT_ROUNDS: %d\n", FLT_ROUNDS);return 0;
}

FLT_RADIX

这个宏定义了指数表示的基数。基数 2 表示二进制,基数 10 表示十进制,基数 16 表示十六进制。

#include <stdio.h>
#include <float.h>int main() {printf("FLT_RADIX: %d\n", FLT_RADIX);return 0;
}

FLT_MANT_DIG, DBL_MANT_DIG, LDBL_MANT_DIG

这些宏定义了 FLT_RADIX 基数中的位数。

#include <stdio.h>
#include <float.h>int main() {printf("FLT_MANT_DIG: %d\n", FLT_MANT_DIG);printf("DBL_MANT_DIG: %d\n", DBL_MANT_DIG);printf("LDBL_MANT_DIG: %d\n", LDBL_MANT_DIG);return 0;
}

FLT_DIG, DBL_DIG, LDBL_DIG

这些宏定义了舍入后不会改变表示的十进制数字的最大值(基数 10)。

#include <stdio.h>
#include <float.h>int main() {printf("FLT_DIG: %d\n", FLT_DIG);printf("DBL_DIG: %d\n", DBL_DIG);printf("LDBL_DIG: %d\n", LDBL_DIG);return 0;
}

FLT_MIN_EXP, DBL_MIN_EXP, LDBL_MIN_EXP

这些宏定义了基数为 FLT_RADIX 时的指数的最小负整数值。

#include <stdio.h>
#include <float.h>int main() {printf("FLT_MIN_EXP: %d\n", FLT_MIN_EXP);printf("DBL_MIN_EXP: %d\n", DBL_MIN_EXP);printf("LDBL_MIN_EXP: %d\n", LDBL_MIN_EXP);return 0;
}

FLT_MIN_10_EXP, DBL_MIN_10_EXP, LDBL_MIN_10_EXP

这些宏定义了基数为 10 时的指数的最小负整数值。

#include <stdio.h>
#include <float.h>int main() {printf("FLT_MIN_10_EXP: %d\n", FLT_MIN_10_EXP);printf("DBL_MIN_10_EXP: %d\n", DBL_MIN_10_EXP);printf("LDBL_MIN_10_EXP: %d\n", LDBL_MIN_10_EXP);return 0;
}

FLT_MAX_EXP, DBL_MAX_EXP, LDBL_MAX_EXP

这些宏定义了基数为 FLT_RADIX 时的指数的最大整数值。

#include <stdio.h>
#include <float.h>int main() {printf("FLT_MAX_EXP: %d\n", FLT_MAX_EXP);printf("DBL_MAX_EXP: %d\n", DBL_MAX_EXP);printf("LDBL_MAX_EXP: %d\n", LDBL_MAX_EXP);return 0;
}

FLT_MAX_10_EXP, DBL_MAX_10_EXP, LDBL_MAX_10_EXP

这些宏定义了基数为 10 时的指数的最大整数值。

#include <stdio.h>
#include <float.h>int main() {printf("FLT_MAX_10_EXP: %d\n", FLT_MAX_10_EXP);printf("DBL_MAX_10_EXP: %d\n", DBL_MAX_10_EXP);printf("LDBL_MAX_10_EXP: %d\n", LDBL_MAX_10_EXP);return 0;
}

FLT_MAX, DBL_MAX, LDBL_MAX

这些宏定义最大的有限浮点值。

#include <stdio.h>
#include <float.h>int main() {printf("FLT_MAX: %.10e\n", FLT_MAX);printf("DBL_MAX: %.10e\n", DBL_MAX);printf("LDBL_MAX: %.10Le\n", LDBL_MAX);return 0;
}

FLT_EPSILON, DBL_EPSILON, LDBL_EPSILON

这些宏定义了可表示的最小有效数字。

#include <stdio.h>
#include <float.h>int main() {printf("FLT_EPSILON: %.10e\n", FLT_EPSILON);printf("DBL_EPSILON: %.10e\n", DBL_EPSILON);printf("LDBL_EPSILON: %.10Le\n", LDBL_EPSILON);return 0;
}

FLT_MIN, DBL_MIN, L

相关文章:

  • 【Ubuntu】通过网线连接两台电脑以实现局域网连接的方法
  • 【docker入门】1-
  • 【Java面试】MongoDB
  • (3)llvm ir转换过程
  • GIT中对子仓库的使用方法介绍
  • 软件测试入门(全面认识软件测试)
  • LeetCode24.两两交换链表中的节点
  • 【LNMP】云导航项目部署及环境搭建(复杂)
  • [HTML]Web前端开发技术30(HTML5、CSS3、JavaScript )JavaScript基础——喵喵画网页
  • 【Django开发】0到1开发美多shop项目:用户登录模块开发。全md文档笔记(附代码 文档)
  • Python 高级语法:一切皆对象
  • 【Flink精讲】Flink任务调度机制
  • ElasticSearch语法
  • 【计算机网络】深度学习使用应用层的HTTP协议
  • 设计模式: 策略模式
  • 【跃迁之路】【444天】程序员高效学习方法论探索系列(实验阶段201-2018.04.25)...
  • AWS实战 - 利用IAM对S3做访问控制
  • Consul Config 使用Git做版本控制的实现
  • crontab执行失败的多种原因
  • java8 Stream Pipelines 浅析
  • JS笔记四:作用域、变量(函数)提升
  • js写一个简单的选项卡
  • LeetCode刷题——29. Divide Two Integers(Part 1靠自己)
  • Logstash 参考指南(目录)
  • MobX
  • MySQL常见的两种存储引擎:MyISAM与InnoDB的爱恨情仇
  • PHP那些事儿
  • React Transition Group -- Transition 组件
  • socket.io+express实现聊天室的思考(三)
  • 搭建gitbook 和 访问权限认证
  • 使用 @font-face
  • 适配mpvue平台的的微信小程序日历组件mpvue-calendar
  • 做一名精致的JavaScripter 01:JavaScript简介
  • 白色的风信子
  • 2017年360最后一道编程题
  • ​ 全球云科技基础设施:亚马逊云科技的海外服务器网络如何演进
  • ### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTr
  • #162 (Div. 2)
  • #大学#套接字
  • #单片机(TB6600驱动42步进电机)
  • (1)(1.8) MSP(MultiWii 串行协议)(4.1 版)
  • (libusb) usb口自动刷新
  • (Redis使用系列) SpirngBoot中关于Redis的值的各种方式的存储与取出 三
  • (笔记)Kotlin——Android封装ViewBinding之二 优化
  • (附源码)spring boot网络空间安全实验教学示范中心网站 毕业设计 111454
  • (附源码)ssm本科教学合格评估管理系统 毕业设计 180916
  • (附源码)计算机毕业设计SSM智慧停车系统
  • (附源码)小程序儿童艺术培训机构教育管理小程序 毕业设计 201740
  • (更新)A股上市公司华证ESG评级得分稳健性校验ESG得分年均值中位数(2009-2023年.12)
  • (一)pytest自动化测试框架之生成测试报告(mac系统)
  • (转载)CentOS查看系统信息|CentOS查看命令
  • ... fatal error LINK1120:1个无法解析的外部命令 的解决办法
  • .bat批处理(五):遍历指定目录下资源文件并更新
  • .NET delegate 委托 、 Event 事件
  • .NET/C# 异常处理:写一个空的 try 块代码,而把重要代码写到 finally 中(Constrained Execution Regions)