C标准库--浮点<float.h>

文章目录

  • 简介
  • 库宏
    • [   单精度浮点数(float)](#   单精度浮点数(float))
    • [   双精度浮点数(double)](#   双精度浮点数(double))
    • [   扩展精度浮点数(long double)](#   扩展精度浮点数(long double))
  • 实例

简介

   <float.h> 是 C 标准库中的一个头文件,定义了与浮点数类型(float、double 和 long double)相关的宏。这些宏提供了浮点数的特性和限制,例如最大值、最小值、精度等。

   <float.h> 提供了一组宏,用于描述浮点数类型的特性和限制。通过使用这些宏,我们可以编写更健壮的代码,处理与浮点数相关的边界情况和特殊情况。

   C 标准库的 float.h 头文件包含了一组与浮点值相关的依赖于平台的常量。这些常量是由 ANSI C 提出的,这让程序更具有可移植性。在讲解这些常量之前,最好先弄清楚浮点数是由下面四个元素组成的:

  

   基于以上 4 个组成部分,一个浮点数的值如下:

      floating-point = ( S ) p x be

   或

      floating-point = (+/-) precision x baseexponent

库宏

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

   单精度浮点数(float)

    

   双精度浮点数(double)

    

   扩展精度浮点数(long double)

    

实例

c 复制代码
		#include <stdio.h>
		#include <float.h>
		
		int main() {
		    printf("Single precision (float):\n");
		    printf("FLT_RADIX: %d\n", FLT_RADIX);
		    printf("FLT_MANT_DIG: %d\n", FLT_MANT_DIG);
		    printf("FLT_DIG: %d\n", FLT_DIG);
		    printf("FLT_MIN_EXP: %d\n", FLT_MIN_EXP);
		    printf("FLT_MIN_10_EXP: %d\n", FLT_MIN_10_EXP);
		    printf("FLT_MAX_EXP: %d\n", FLT_MAX_EXP);
		    printf("FLT_MAX_10_EXP: %d\n", FLT_MAX_10_EXP);
		    printf("FLT_MAX: %e\n", FLT_MAX);
		    printf("FLT_MIN: %e\n", FLT_MIN);
		    printf("FLT_EPSILON: %e\n", FLT_EPSILON);
		
		    printf("\nDouble precision (double):\n");
		    printf("DBL_MANT_DIG: %d\n", DBL_MANT_DIG);
		    printf("DBL_DIG: %d\n", DBL_DIG);
		    printf("DBL_MIN_EXP: %d\n", DBL_MIN_EXP);
		    printf("DBL_MIN_10_EXP: %d\n", DBL_MIN_10_EXP);
		    printf("DBL_MAX_EXP: %d\n", DBL_MAX_EXP);
		    printf("DBL_MAX_10_EXP: %d\n", DBL_MAX_10_EXP);
		    printf("DBL_MAX: %e\n", DBL_MAX);
		    printf("DBL_MIN: %e\n", DBL_MIN);
		    printf("DBL_EPSILON: %e\n", DBL_EPSILON);
		
		    printf("\nExtended precision (long double):\n");
		    printf("LDBL_MANT_DIG: %d\n", LDBL_MANT_DIG);
		    printf("LDBL_DIG: %d\n", LDBL_DIG);
		    printf("LDBL_MIN_EXP: %d\n", LDBL_MIN_EXP);
		    printf("LDBL_MIN_10_EXP: %d\n", LDBL_MIN_10_EXP);
		    printf("LDBL_MAX_EXP: %d\n", LDBL_MAX_EXP);
		    printf("LDBL_MAX_10_EXP: %d\n", LDBL_MAX_10_EXP);
		    printf("LDBL_MAX: %Le\n", LDBL_MAX);
		    printf("LDBL_MIN: %Le\n", LDBL_MIN);
		    printf("LDBL_EPSILON: %Le\n", LDBL_EPSILON);
		
		    return 0;
		}
复制代码
	运行结果:
		Single precision (float):
		FLT_RADIX: 2
		FLT_MANT_DIG: 24
		FLT_DIG: 6
		FLT_MIN_EXP: -125
		FLT_MIN_10_EXP: -37
		FLT_MAX_EXP: 128
		FLT_MAX_10_EXP: 38
		FLT_MAX: 3.402823e+38
		FLT_MIN: 1.175494e-38
		FLT_EPSILON: 1.192093e-07
		
		Double precision (double):
		DBL_MANT_DIG: 53
		DBL_DIG: 15
		DBL_MIN_EXP: -1021
		DBL_MIN_10_EXP: -307
		DBL_MAX_EXP: 1024
		DBL_MAX_10_EXP: 308
		DBL_MAX: 1.797693e+308
		DBL_MIN: 2.225074e-308
		DBL_EPSILON: 2.220446e-16
		
		Extended precision (long double):
		LDBL_MANT_DIG: 64
		LDBL_DIG: 18
		LDBL_MIN_EXP: -16381
		LDBL_MIN_10_EXP: -4931
		LDBL_MAX_EXP: 16384
		LDBL_MAX_10_EXP: 4932
		LDBL_MAX: 1.189731e+4932
		LDBL_MIN: 3.362103e-4932
		LDBL_EPSILON: 1.084202e-19
相关推荐
CRMEB系统商城4 分钟前
开源自建还是SaaS订阅?算一笔3年经济账
java·大数据·开发语言·开源
keyipatience1 小时前
线程栈与TLS和线程互斥
java·linux·服务器·开发语言·ubuntu
我的xiaodoujiao1 小时前
快速学习Python基础知识详细图文教程9--函数进阶
开发语言·python·学习·测试工具
Scott9999HH2 小时前
告别流量波动玄学!从法拉第电磁定律到底层 C/C++ 流量累积算法,深度解密工业级电磁流量计选型与开发
c语言·c++·算法
爱喝水的鱼丶2 小时前
SAP-ABAP:ALV通用封装实践——搭建可复用的ALV开发工具类,减少80%重复代码
开发语言·性能优化·sap·abap·erp·alv
脱胎换骨-军哥2 小时前
C++/Rust无缝互操作:混合系统新常态
开发语言·c++·rust
songroom3 小时前
Kimi K3:Rust封装XTP接口详细教程实践
开发语言·后端·rust
kebeiovo3 小时前
游戏服务端开发:Actor模型详解(Go语言)
开发语言·后端·golang
天空'之城3 小时前
C 语言工业级通用组件手写 06:固定块内存池
c语言·嵌入式开发·内存池·底层优化
迷途呀3 小时前
Python:函数中的参数类型
开发语言·笔记·python·langchain·nlp