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

C语言入门系列:数据类型之浮点数

文章目录

  • 一,什么是浮点数
  • 二,C语言中的浮点数
    • 1,float
      • 1.1 float的声明
      • 1.2 float的存储格式
      • 1.3 float的精度和范围
    • 2,double
      • 2.1 double变量的声明
      • 2.2 double的存储格式
      • 1.3 double的精度和范围
      • 1.4 long double
    • 3,0.2 + 0.1 ≠ 0.3
    • 4,优先使用double
  • 三,C语言中的浮点数表示法

一,什么是浮点数

浮点数是计算机存储小数的一种方式,在C语言中,任何带小数点的数都被编译器解释为浮点数。

顾名思义,浮点数就是小数点可以浮动的数。

要了解浮点数,先回忆下科学计数法,数字3140,可以有如下多种表示方法:

在这里插入图片描述
这种表示方法中,小数点是可以移动的,称之为浮点数。

有没有小数点固定的定点数呢?理论上是有的,但是C语言标准中没有定点数的规定。

所以,浮点数是一种用计算机中用科学计数法表示小数的形式

所谓“浮点数”就是使用 m * bⁿ 的形式,存储一个数值:

  • m是小数部分
  • b是基数(通常是2)
  • n是指数部分

这种形式是精度和数值范围的一种结合,可以表示非常大或者非常小的数。

二,C语言中的浮点数

在C语言中存在单精度(single precision)和双精度(double precision)两种浮点数类型,分别对应于floatdouble数据类型。

  • 单精度浮点数(float:这是C语言中的一种基本浮点数类型,通常占用32位(4字节)存储空间。它可以表示大约6到7位十进制数的精度,数值范围大约从-3.40282347E+38到3.40282347E+38。

  • 双精度浮点数(double:这是C语言中另一种更广泛使用的浮点数类型,占用64位(8字节)存储空间。它提供了更高的精度,大约可以表示15到16位十进制数的精度,数值范围大约从-1.7976931348623157E+308到1.7976931348623157E+308。

1,float

1.1 float的声明

浮点数的类型声明使用float关键字,可以用来声明浮点数变量。

float c = 10.5;

上面示例中,变量c的就是浮点数类型。

1.2 float的存储格式

在C语言中,float类型的浮点数遵循IEEE 754标准,占用4个字节(32位),其由三部分构成:

  • 1位符号位(S):表示数的正负。
  • 8位指数位(E):使用偏置表示法存储指数,偏置值为127。
  • 23位尾数位(M):存储小数部分的实际二进制位,实际表示时假设在最前面有一个隐含的1(即尾数的精度实际上是24位)。

1.3 float的精度和范围

23位尾数位决定了float类型的精度,其能表示小数点后有6~7位小数的十进制数字。

float类型的指数范围为十进制的-38到38。

float类型数值范围用十进制表示,大约从-3.40282347E+383.40282347E+38

2,double

2.1 double变量的声明

双精度浮点数的类型声明使用double关键字,可以用来声明浮点数变量。

double c = 10.5;

上面示例中,变量c的就是浮点数double类型。

2.2 double的存储格式

在C语言中,double类型的浮点数遵循IEEE 754标准,占用8个字节(64位),其由三部分构成:

  • 1位符号位(S):表示数的正负。
  • 11位指数位(E):使用偏置表示法存储指数,偏置值为1023。
  • 52位尾数位(M):存储小数部分的实际二进制位,实际表示时假设在最前面有一个隐含的1(即尾数的精度实际上是53位)。

1.3 double的精度和范围

52尾数位决定了float类型的精度,其能表示小数点后有15~16位小数的十进制数字。

double类型的指数范围为十进制的-308到308。

double类型数值范围用十进制表示,大约从-1.7976931348623157E+3081.7976931348623157E+308

1.4 long double

C语言还提供了一个long double类型,其精度和范围依编译器而定,可能比double更高,通常占用16个字节,但并非所有系统上都有显著的差别。

3,0.2 + 0.1 ≠ 0.3

注意,由于存在精度限制,浮点数只是一个近似值,它的计算是不精确的,比如 C 语言里面0.1 + 0.2并不等于0.3,而是有一个很小的误差。

if (0.1 + 0.2 == 0.3) // false

在这里插入图片描述

关于这个问题更详细的解释,可以参考https://blog.csdn.net/epitomizelu/article/details/139115670

4,优先使用double

在实际编程中,选择使用float还是double取决于对精度的需求和存储空间的考虑。

double类型因其更高的精度而被推荐为默认的浮点数类型,除非有特别的内存限制或性能考虑。

三,C语言中的浮点数表示法

C 语言允许使用科学计数法表示浮点数,使用字母e来分隔小数部分和指数部分。

double x = 123.456e+3; // 123.456 x 10^3
// 等同于
double x = 123.456e3;

上面示例中,e后面如果是加号+,加号可以省略。

注意,科学计数法里面e的前后,不能存在空格。

另外,科学计数法的小数部分如果是0.x或x.0的形式,那么0可以省略。

0.3E6
// 等同于
.3E63.0E6
// 等同于
3.E6

相关文章:

C语言入门系列:数据类型之浮点数

文章目录 一,什么是浮点数二,C语言中的浮点数1,float1.1 float的声明1.2 float的存储格式1.3 float的精度和范围 2,double2.1 double变量的声明2.2 double的存储格式1.3 double的精度和范围1.4 long double 3,0.2 0.1…...

思科配置路由器,四台主机互相ping通

一、如图配置 PC4和PC5用来配置路由器,各ip、接口如图所示。 二、配置各主机ip、子网掩码SNM、默认网关DGW (一)、PC0 (二)、PC1 (三)、PC2 (四)、PC3 三、 配置路由器Router0 (期间报错是打错了字母) Router>en Router#configure terminal Enter configurat…...

个人博客测试用例设计

个人博客测试用例设计 个人博客测试用例 分别从功能、性能、安全、兼容及界面分别展开 个人博客测试用例...

Java输入输出语句 和 保留字

目录 键盘输入语句 保留字 键盘输入语句 Input.java , 需要一个 扫描器(对象), 就是Scanner 步骤 : 导入该类的所在包, java.util.*创建该类对象(声明变量)调用里面的功能 案例要求:可以从控制台接收用户信息,【姓…...

生成对抗网络——GAN深度卷积实现(代码+理解)

本篇博客为 上篇博客的 另一个实现版本,训练流程相同,所以只实现代码,感兴趣可以跳转看一下。 生成对抗网络—GAN(代码理解) http://t.csdnimg.cn/HDfLOhttp://t.csdnimg.cn/HDfLO 目录 一、GAN深度卷积实现 1. 模型…...

gbase8s数据库阻塞检查点和非阻塞检查点的执行机制

1. 检查点的描述 为了便于数据库系统的复原和逻辑恢复,数据库服务器生成的一致性标志点,称为检查点,其是建立在数据库系统的已知和一致状态时日志中的某个时间点检查点的目的在于定期将逻辑日志中的重新启动点向前移动 如果存在检查点&#…...

ARM32开发--串口库封装(初级)

知不足而奋进望远山而前行 目录 文章目录 前言 目标 内容 开发流程 文件目录创建 分组创建 接口定义 完整代码 总结 前言 在嵌入式软件开发中,封装抽取流程和抽取封装策略是非常重要的技术,能够提高代码的复用性和可维护性。本文将介绍如何在文…...

统一管理:Vue公共组件/公共样式/全局自定义指令

main.js 引入存放公共文件的文件路径 import "./plugins";src/plugins文件夹下的index.js 在处理公共文件中分别引入 /* 公共引入,勿随意修改,修改时需经过确认 */ import Vue from "vue";import "/icons"; // 图标 import ByuiQueryForm fr…...

Linux之旅: 基础知识点的终极指南

文章目录 1、Linux的目录结构2、ls命令3、管理文件和目录4、linux命令使用细节和技巧5、权限管理基本命令6、搜索命令7、管道符与重定向8、压缩和解压命令9、用户及vim编辑器10、用户和用户组管理一、Linux系统用户账号的基本管理二、Linux系统用户组的管理 1、Linux的目录结构…...

C#部分方法有什么用处?和传统方法有什么区别?什么时候用合适?

在C#中,部分类(partial class)和部分方法(partial method)是两个不同的概念,但它们经常一起使用,特别是在代码生成和框架设计中。下面我将分别解释这两个概念,并讨论它们的用处、与传…...

elasticsearch hanlp插件远程词典配置

elasticsearch hanlp插件远程词典配置 背景远程词典配置新增远程词典文件修改hanlp-remote.xml自动加载词典 远程词典测试 背景 在使用elasticsearch的过程中,总会遇到与分词相关的需求,这里将针对常用的elasticsearch hanlp(后面统称为 es …...

力扣每日一题 6/18 字符串/模拟

博客主页:誓则盟约系列专栏:IT竞赛 专栏关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞👍收藏⭐评论✍ 2288.价格减免 【中等】 题目: 句子 是由若干个单词组成的字符…...

架构设计 - Nginx Proxy Cache 缓存配置

摘要: web 应用业务缓存通常3级: 一级缓存:JVM 本地缓存 二级缓存:Redis集中式缓存 三级缓存:Nginx Proxy Cache 缓存 或 Nginx Lua 缓存 四级缓存:静态资源CDN缓存 本文主要分享 Nginx Proxy Cache 缓…...

【前端】HTML5基础

目录 0 参考1 网页1.1 什么是网页1.2 什么是HTML1.3 网页的形成 2 浏览器2.1 常用的浏览器2.2 浏览器内核 3 Web标准3.1 为什么需要Web标准3.2 Web标准的构成 4 HTML 标签4.1 HTML语法规范4.1.1 基本语法概述4.1.2 标签关系4.1.2.1 包含关系4.1.2.2 并列关系 4.2 HTML基本结构标…...

9个最佳性能测试工具(2024)

1、前言 性能测试检查软件程序在预期工作负载下的速度、响应时间、可靠性、资源使用情况和可扩展性。性能测试的目的不是发现功能缺陷,而是消除软件或设备中的性能瓶颈。 性能测试为利益相关者提供有关其应用程序的速度、稳定性和可扩展性的信息。更重要的是&…...

RTthread+STM32F407ZGTx+烟雾报警检测+蜂鸣器报警+LED闪烁||使用RTthread Studio

目录 实验背景 1.安装环境 2.配置环境 3.先编译下载实例程序2,观察DS0是否闪烁 4.实验方法 5.实例代码 6.硬件连接 7.实验效果 8.关于这次开发遇到的问题 1.反应慢,都熄灭1分钟多了,才报的问题? 2.关于rt_pin_mode(KEY…...

k8s资源的基本操作

文章目录 一、Namespace1、概述2、预定义的k8s命名空间2.1、default2.2、kube-public2.3、kube-system2.4、kube-node-lease 3、命名空间基本操作3.1、查看3.1.1、查看所有的命名空间3.1.2、查看指定的命名空间3.1.3、指定输出格式3.1.4、查看ns详情 3.2、创建3.2.1、命令行创建…...

19.面包屑导航制作

面包屑导航制作 官网&#xff1a;组件 | Element 1. 在layout下新建BreadCrumb.vue BreadCrumb.vue <template><div class"bread-text"><el-breadcrumb class"bred"separator"/"><el-breadcrumb-item v-for"item in…...

做动画?Animatediff 和 ComfyUI 更配哦!

如果从工作流和内存利用率的角度来说&#xff0c;Animatediff 和 ComfyUI 可能更配一些&#xff0c;毕竟制作动画是一个很吃内存的操作。 首先&#xff0c;我们需要在管理器中下载 Animatediff 插件&#xff0c;当然也可以直接导入听雨的工作流&#xff0c;然后在管理器的安装…...

笔记-python里面的xlrd模块详解

那我就一下面积个问题对xlrd模块进行学习一下&#xff1a; 1.什么是xlrd模块&#xff1f; 2.为什么使用xlrd模块&#xff1f; 3.怎样使用xlrd模块&#xff1f; 1.什么是xlrd模块&#xff1f; ♦python操作excel主要用到xlrd和xlwt这两个库&#xff0c;即xlrd是读excel&…...

C++实现分布式网络通信框架RPC(3)--rpc调用端

目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中&#xff0c;我们已经大致实现了rpc服务端的各项功能代…...

数据库分批入库

今天在工作中&#xff0c;遇到一个问题&#xff0c;就是分批查询的时候&#xff0c;由于批次过大导致出现了一些问题&#xff0c;一下是问题描述和解决方案&#xff1a; 示例&#xff1a; // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...

实现弹窗随键盘上移居中

实现弹窗随键盘上移的核心思路 在Android中&#xff0c;可以通过监听键盘的显示和隐藏事件&#xff0c;动态调整弹窗的位置。关键点在于获取键盘高度&#xff0c;并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...

让回归模型不再被异常值“带跑偏“,MSE和Cauchy损失函数在噪声数据环境下的实战对比

在机器学习的回归分析中&#xff0c;损失函数的选择对模型性能具有决定性影响。均方误差&#xff08;MSE&#xff09;作为经典的损失函数&#xff0c;在处理干净数据时表现优异&#xff0c;但在面对包含异常值的噪声数据时&#xff0c;其对大误差的二次惩罚机制往往导致模型参数…...

GruntJS-前端自动化任务运行器从入门到实战

Grunt 完全指南&#xff1a;从入门到实战 一、Grunt 是什么&#xff1f; Grunt是一个基于 Node.js 的前端自动化任务运行器&#xff0c;主要用于自动化执行项目开发中重复性高的任务&#xff0c;例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...

WPF八大法则:告别模态窗口卡顿

⚙️ 核心问题&#xff1a;阻塞式模态窗口的缺陷 原始代码中ShowDialog()会阻塞UI线程&#xff0c;导致后续逻辑无法执行&#xff1a; var result modalWindow.ShowDialog(); // 线程阻塞 ProcessResult(result); // 必须等待窗口关闭根本问题&#xff1a…...

Java 与 MySQL 性能优化:MySQL 慢 SQL 诊断与分析方法详解

文章目录 一、开启慢查询日志&#xff0c;定位耗时SQL1.1 查看慢查询日志是否开启1.2 临时开启慢查询日志1.3 永久开启慢查询日志1.4 分析慢查询日志 二、使用EXPLAIN分析SQL执行计划2.1 EXPLAIN的基本使用2.2 EXPLAIN分析案例2.3 根据EXPLAIN结果优化SQL 三、使用SHOW PROFILE…...

针对药品仓库的效期管理问题,如何利用WMS系统“破局”

案例&#xff1a; 某医药分销企业&#xff0c;主要经营各类药品的批发与零售。由于药品的特殊性&#xff0c;效期管理至关重要&#xff0c;但该企业一直面临效期问题的困扰。在未使用WMS系统之前&#xff0c;其药品入库、存储、出库等环节的效期管理主要依赖人工记录与检查。库…...

【java面试】微服务篇

【java面试】微服务篇 一、总体框架二、Springcloud&#xff08;一&#xff09;Springcloud五大组件&#xff08;二&#xff09;服务注册和发现1、Eureka2、Nacos &#xff08;三&#xff09;负载均衡1、Ribbon负载均衡流程2、Ribbon负载均衡策略3、自定义负载均衡策略4、总结 …...

MeanFlow:何凯明新作,单步去噪图像生成新SOTA

1.简介 这篇文章介绍了一种名为MeanFlow的新型生成模型框架&#xff0c;旨在通过单步生成过程高效地将先验分布转换为数据分布。文章的核心创新在于引入了平均速度的概念&#xff0c;这一概念的引入使得模型能够通过单次函数评估完成从先验分布到数据分布的转换&#xff0c;显…...