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

news2024/11/20 20:36:12

文章目录

  • 一,什么是浮点数
  • 二,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
// 等同于
.3E6

3.0E6
// 等同于
3.E6

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

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

相关文章

【查看显卡信息】——Ubuntu和windows

1、VMware虚拟机 VMware虚拟机上不能使用CUDA/CUDNN,也安装不了显卡驱动 查看显卡信息: lspci | grep -i vga 不会显示显卡信息,只会输出VMware SVGA II Adapter,表示这是一个虚拟机,无法安装和使用显卡驱动 使用上…

餐饮点餐系统小程序(ThinkPHP+FastAdmin+UniApp)

便捷美食新体验🍔📱 基于ThinkPHPFastAdminUniApp开发的餐饮点餐系统,主要应用于餐饮,例如早餐、面馆、快餐、零食小吃等快捷扫码点餐需求,标准版本仅支持先付款后就餐模式,高级版本支持先付后就餐和先就餐…

照度计仪器校准检测需要注意哪些因素?通常选择什么校准机构?

照度计是计量中光学领域常见的一类计量器具,一般是用于测量光照影响的微量变化,在实验室和机构中,都有广泛运用。常规的照度计在仪器校准检测中,误差主要因素是外界光线干扰,以及温湿度变化和稳压直流电源的电压变化差…

深度优先遍历-在二叉树中找到两个节点的最近公共祖先

目录 一、问题描述 二、解题思路 三、代码实现 四、刷题链接 一、问题描述 二、解题思路 使用深度递归的方式,如果当前结点val为o1时,返回1,如果当前结点是val为o2时,返回2; 1.当前结点的左右子树结点返回值分别…

[UE虚幻引擎] DTSpeechVoice 文字转语音播放 插件说明

本插件可以在UE中使用蓝图把文本转成语音播放,播放的声音引擎是使用Windows自带的语音引擎,支持Win10,Win11。 系统设置 首先确认电脑是否有语音系统,一般正常安装的电脑都是自带的。 如果要播放多语言的,请自己下载其…

5.00001 postgresql的辅助线程 - pg_stat架构整理

文章目录 整体架构关键变量PgStat_LocalState pgStatLocal; // (pg_stat.c:193)static dlist_head pgStatPending = DLIST_STATIC_INIT(pgStatPending); (pg_stat.c:218)static MemoryContext pgStatPendingContext = NULL;(pg_stat.c:210)static const PgStat_KindInfo pgstat…

网络安全:深入探讨端点保护的策略与实践

文章目录 网络安全:深入探讨端点保护的策略与实践引言端点保护简介端点保护面临的挑战端点保护的最佳实践定期更新和打补丁使用强大的防病毒软件实施多因素认证 结语 网络安全:深入探讨端点保护的策略与实践 引言 在我们的网络安全系列文章中&#xff…

陶建辉入选 2023 年度“中国物联网行业卓越人物榜”

在这个技术飞速发展的时代,物联网行业作为推动社会进步的重要力量,正在不断地演化和革新。近日,中国智联网生态大会暨“2023 物联之星”年度榜单颁奖典礼在上海浦东举行。现场公布了拥有物联网行业奥斯卡奖之称的 ——“物联之星 2023 中国物…

必看!!! 2024 最新 PG 硬核干货大盘点(上)

PGConf.dev(原名PGCon,从2007年至2023年)首次在风景如画的加拿大温哥华市举办。此次重新定位的会议带来了全新的视角和多项新的内容,参会体验再次升级。尽管 PGCon 历来更侧重于开发者,吸引来自世界各地的资深开发者、…

零信任是对抗AI威胁的“解药”

人工智能的变革力量正在重塑众多行业的业务运营。通过机器人流程自动化(RPA),人工智能正在将人力资源从重复的、基于规则的任务中解放出来,并将其重点放在战略性的、复杂的操作上。此外,人工智能和机器学习算法可以以前…

LabVIEW电池管理系统测试平台

随着混合动力汽车技术的快速发展,对电池管理系统(BMS)的测试需求显著增加。利用LabVIEW软件开发了一款电池管理系统测试平台,通过模拟电池行为验证BMS的控制策略,从而降低成本、缩短开发周期,并提高整车的能…

解决solidworks下模型导出为urdf文件报错 “Reference sketch does not exist”的问题

标题 解决solidworks下模型导出为urdf文件报错 “Reference sketch does not exist”的问题 问题描述如下图: 解决方案: 将URDF Rederence删除后重新export即可。

零成本!无需服务器,搭建你的个性化应用!

在快速发展的互联网时代,每个人都有创造自己应用的梦想。但是,传统的应用开发往往需要大量的技术和资源投入,这对于许多独立开发者和初创企业来说是一个巨大的挑战。幸运的是,现在有了 MemFire Cloud,这款无需服务器、…

内外网映射访问内网服务器

如果本地有公网ip,比如连接的宽带有公网ip,可以直接通过路由配置转发就行了,如果本地没有公网ip,那就需要通过下面这种方式来访问内网服务器了。 1:首先内网服务器需要连接外网,可以通过网线或者WiFi都可以…

lotus snapshot 快照列表

快照列表 https://forest-archive.chainsafe.dev/list/mainnet/latest

七、(正点原子)Linux并发与竞争

Linux是多任务操作系统,肯定会存在多个任务共同操作同一段内存或者设备的情况,多个任务甚至中断都能访问的资源叫做共享资源。在驱动开发中要注意对共享资源的保护,也就是要处理对共享资源的并发访问。 一、并发与竞争 1、简介 并发就是多个…

PlantUML |像写代码一样画图

什么是 PlantUML? PlantUML是一个开源项目,它允许用户使用简单易懂的文本语言来定义和创建UML(统一建模语言)图表。这种文本语言基于简单的语法规则,使得用户可以快速地编写出图表的描述代码。 PlantUML支持多种UML图…

vite项目配置高德api定位功能

项目场景: 用vite项目集成了一个H5页面的小程序,需要调用高德的定位API,在浏览器中测试的时候,出现了一系列定位失败的情况。 问题1 Get ipLocation failed、Geolocation permission denied 本地http访问下,定位失败…

利用CUDA加速卷积计算:原理、实践与示例代码

利用CUDA加速卷积计算:原理、实践与示例代码 在深度学习领域,卷积神经网络(Convolutional Neural Networks,CNN)是目前最流行和有效的模型之一。然而,随着模型复杂度的增加,卷积计算的计算量也随之增加,这使得在CPU上进行卷积计算变得非常耗时。因此,利用CUDA加速卷积…

spark独立集群搭建

spark独立集群搭建(不依赖Hadoop) 1、上传spark-2.4.5-bin-hadoop2.7.tgz至 /usr/local/moudel ,再解压到 /usr/local/soft tar -zxvf spark-2.4.5-bin-hadoop2.7.tgz -C /usr/local/soft/ 重命名 mv spark-2.4.5-bin-hadoop2.7/ spark-2.4.5 配…