C语言中的float代表单精度的浮点数据类型.按书上讲的float最多可表示7位有效数字,数字可正可负,指数范围为-37~38之间.比如 3.4e2= 3400 就是一个浮点数,前面那个叫做科学计数法. 当然如果在C语言中定义一个float常量的话需要在后面加上f或F,要不然默认是被看成double(双精度浮点数).所以前面的数在C中如果要表示成单精度浮点数的话应该是3.4e2f.
本人比较奇怪的是为什么是7位有效数字而不是8位,9位.于是查阅了相关资料.原来C中的float是按照国际标准的IEEE754标准来表示的.这个标准除了定义了float外还定义了另外几种浮点数的表示法. 可参考这里. 我们最常用的就是float和double,这两个类型还有一个别名分别是binary32和binary64.就是说分别是用32位和64位来表示的.
来看下float, 他有1个符号位,8个指数位及24个有效数位(只保存23位). 当然刚才的binary32中的binary表明他是以二进制形式保存的.下图是一个float在内存中的表示.
第31位是符号(sign)位,23~30是指数(exponent)位,0~22是有效数(fraction小数)位. 其中有效数中还有一个隐藏位,永远是1. 所以有效数位的那部分永远是1.xxxxxxx...(23个x).另外一个要注意的地方是指数的表示,在IEEE754中规定是用偏移指数的方式表示的,意思是指数位中的数减去127后的数来表示最终的指数.比较上面的图中指数部分是01111100,转换成十进制数为124,然后减去127,结果是 -3,也就是说指数部分是2-3=1/8=0.125 .那么有效数部分呢? 加上隐藏的位之后表示为 1.01000000000000000000000=1+(1*2-2)=5/4=1.25 ,所以上面表示的数就是 1/8 * 5/4 = 0.15625 .
指数可表示的最大值和最小值分类是127和-126,按理说8位应该可表示-128~127之间,设置成-126的目的是为了防止最小的数(1/2-126) 不上溢出(这个有点难理解,文档上是这么说的).这里的127,-126是作为2的指数表示的,那么当表示成10的指数时应该是多少呢? 我们知道函数 y=10x 的反函数为 x = log10y ,当然这里的10可以后任何其它数. 所以2127=10x => x = log2(127) = 38.23 约等于38, log2(-126) = -37.99约等于-37,由是就有了-37~38这样的指数范围. 那么7位有效数字呢? 同样的道理 log2(24) = 7.22 ,也就是说24位二进制有效位相当于107 的数量级,也就是7位有效数字. 那么浮点数最大可以表示的数是多少呢? 我们知道指数最大是127,有效数最大的话是每位全部都是1,所以这个数应该是
1.11111111111111111111111*2127 ≈ 3.4028234 * 1038 .
浮点数其实还包括像四舍五入这样的问题.这里就不说了.(完)
- 大小: 5.4 KB
分享到:
相关推荐
总之,理解和实现自定义字节协议传输float数据类型是一项重要的技能,它涉及浮点数的二进制表示、位运算以及网络通信的协议设计。在Android开发中,熟悉这些概念和技巧能帮助我们编写出更高效、更可靠的网络通信代码...
LitJson修改版是针对原版LitJson库进行的优化,主要目的是为了在Unity3D环境中更好地支持`float`数据类型的序列化与反序列化。原版LitJson库是一款轻量级的JSON(JavaScript Object Notation)解析器和生成器,主要...
FLOAT 数据类型:FLOAT 数据类型是一个 32 位浮点数,范围是 10e-38 到 10e38,有效位数为 7 位。它通常用于表示浮点数值。 STRING 数据类型:STRING 数据类型是一个字符串类型,最大长度为 128 个字符。它通常用于...
在标题中提到的“数据库数据类型float到C#类型decimal, float数据类型转化无效”中,问题的核心在于尝试将数据库中float类型的数据转换为C#中的decimal类型时出现错误。这个问题通常发生在数据从数据库中取出后,...
* float 数据类型:可以存储从 -1.79E+308 到 1.79E+308 之间的浮点数。 * real 数据类型:可以存储从 -3.40E+38 到 3.40E+38 之间的浮点数。 4. 日期时间型数据类型 SQL 数据库中的日期时间型数据类型包括 ...
flaot取值范围 #include #include #include <float.h> int main(int argc, char *argv[]) { printf("float分配%d字节\n",sizeof(float)); printf("%e\n",FLT_MIN);
- **精度指定**:`FLOAT` 数据类型可以写成 `FLOAT[n]` 形式,`n` 指定精度,`n` 为 1 到 15 之间的整数。当 `n` 在 1 到 7 之间时,相当于定义了 `REAL` 类型;当 `n` 在 8 到 15 之间时,定义了 `FLOAT` 类型。 ...
Float数据类型是一种近似数值类型,用于存储浮点数,范围从`-1.79E+308`到`1.79E+308`。由于浮点数的存储方式,它可能无法精确表示所有数值,但对于大多数科学和工程应用而言,其精度已经足够。 #### Image (二进制...
组态王数据类型是指在组态王系统中定义的变量类型,共有 9 种,分别是 BIT、BYTE、SHORT、USHORT、BCD、LONG、LONGBCD、FLOAT 和 STRING。这些数据类型用于定义变量对应的寄存器的数据类型,适用于 I/O 类型的变量。...
- **定义**: `FLOAT` 数据类型可以精确到第 15 位小数,其范围为从 `-1.79E-308` 到 `1.79E+308`。 - **存储**: 每个 `FLOAT` 类型的数据占用 8 个字节的存储空间。 - **格式**: `FLOAT[n]`,其中 `n` 指定 `FLOAT` ...
C++中,可以使用`ifstream`类来读取二进制文件中的float数据: ```cpp #include #include int main() { std::ifstream file("ReadFloat.bin", std::ios::binary); float value; while (file.read...
在Keil MDK-ARM开发环境中,了解不同数据类型的字节数对于编写高效且符合硬件要求的代码至关重要。本文将详细解析标题和描述中提到的各种数据类型在Keil MDK-ARM下的字节数占用情况。 首先,Keil MDK-ARM是一个针对...
例如,年龄数据可以定义为 tinyint 数据类型,而平均成绩数据可以定义为 decimal 或 float 数据类型。 货币数据类型 货币数据类型是专门针对金额数据而定义的,它可以说是一种特殊的小数数值数据,固定为 4 位小数...
TwinCAT PLC支持哪些变量类型,有哪些数据类型
LitJsonExt是一个针对 LitJson 库的扩展,主要目的是解决原生 LitJson 在处理 `float` 数据类型时可能存在的不支持或兼容性问题。LitJson 是一个轻量级的 JSON 库,它被广泛用于 C# 开发中,因为其性能高效、易于...
iOS 开发中,double 和 float 数据类型的计算精度问题是一个常见的问题。本篇文章将详细介绍 iOS 中 double/float 数据计算精度问题的根源、解决方案和高精度计算方法。 一、double/float 数据计算精度问题的根源 ...
C++ VS2015 CString string int float各种类型转换,MFC对话框实现对各种类型数据转换并显示
float数据类型是一种近似数值类型,供浮点数使用。real数据类型像浮点数一样,是近似数值类型。 日期时间型包括datetime、smalldatetime等数据类型。datetime数据类型用来表示日期和时间,存储从1753年1月1日到9999...
* float 数据类型:是一种近似数值类型,供浮点数使用。 * real 数据类型:像浮点数一样,是近似数值类型。 日期时间型 日期时间型数据类型包括 datetime 和 smalldatetime 等。它们用于存储日期和时间数据。 * ...