精华内容
下载资源
问答
  • 浮点数据范围

    千次阅读 2019-10-01 23:12:02
    1范围 float和double的范围是由指数的位数来决定的。 float的指数位有8位,而double的指数位有11位,分布如下: float: 1bit(符号位) 8bits(指数位) 23bits(尾数位) double:...

    1 范围

    float和double的范围是由指数的位数来决定的。

    float的指数位有8位,而double的指数位有11位,分布如下:

    float:

    1bit(符号位)

    8bits(指数位)

    23bits(尾数位)

    double:

    1bit(符号位)

    11bits(指数位)

    52bits(尾数位)

    于是,float的指数范围为-127~+128,而double的指数范围为-1023~+1024,并且指数位是按补码的形式来划分的。其中负指数决定了浮点数所能表达的绝对值最小的非零数;而正指数决定了浮点数所能表达的绝对值最大的数,也即决定了浮点数的取值范围。

    float的范围为-2^128 ~ +2^128,也即-3.40E+38 ~ +3.40E+38;double的范围为-2^1024 ~ +2^1024,也即-1.79E+308 ~ +1.79E+308。

    2 精度

    float和double的精度是由尾数的位数来决定的。浮点数在内存中是按科学计数法来存储的,其整数部分始终是一个隐含着的“1”,由于它是不变的,故不能对精度造成影响。

    float:2^23 = 8388608,一共七位,这意味着最多能有7位有效数字,但绝对能保证的为6位,也即float的精度为6~7位有效数字;

    double:2^52 = 4503599627370496,一共16位,同理,double的精度为15~16位。

    转载于:https://www.cnblogs.com/QuentinYo/archive/2012/10/11/2719575.html

    展开全文
  • c语言整型与浮点数据存取的范围

    千次阅读 2019-04-12 23:17:52
    c语言整型与浮点数据存取的范围 整型数据: 1.long int 的由来 在win32及现在现在系统中,长度为4;在历史上,或者其他某些系统中,int长度为2,是short int。 所以: short<=int<=long 测试类型数据的字节...

    c语言整型与浮点型数据存取的范围

    整型数据:

    1.long int 的由来
    在win32及现在现在系统中,长度为4;在历史上,或者其他某些系统中,int长度为2,是short int。
    所以: short<=int<=long

    测试类型数据的字节数函数:sizeof(类型名称)

    printf("%d",sizeof(int));
    

    这里列举在win64下的类型字节数及取值范围

    类型名称字节数取值范围
    short (short int)2(-2 ^15)~ (2^15-1)-32768~+32767
    unsigned short20~65535
    int4(-2 ^31)~ (2^31-1)-2147483648~ +2147483647
    unsigned int40~4294967295
    long (long int)4(-2 ^31)~ (2^31-1) -2147483648~+2141483647
    unsigned long40~4294967295
    long long (long long long int)8(-2 ^63)~ (2^63-1)-9223372036854775808~+9223372036854775807
    unsigned long long80~18446744073709551615

    浮点型数据:

    取值范围(看指数部分):
    float的指数部分有 8bit (2^8),由于是有符号型,所以得到对应的指数范围-128~128。
    取值范围为:
    (-2 ^128)~ (2^128),约等于-3.4E38 ~ +3.4E38 ;
    double的指数部分有 11bit(2^11) , 对应的指数范围-1024~1024。
    取值范围为:
    (-2 ^1024)~ (2^1024),约 等于-1.797E308 ~ +1.797E308;

    精度( 有效数字)(主要看尾数位):
    float的尾数位是23bit,对应7~8位十进制数,所以有效数字有的编译器是7位,也有的是8位;
    double的尾数位是52bit,对应15~16位十进制数,有效数字位15位或16位。

    类型名称指数位尾数位取值范围有效数字
    float823(-2 ^128)~ (2^128) 约等于-3.4E38 ~ +3.4E387 或 8位
    double1152(-2 ^1024)~ (2^1024) 约等于-1.797E308 ~ +1.797E30815 或 16位

    double的存取的错误认知
    double类型可以存307位(实际是308,但存的最大的最高位为1,所以基本默认这里就讲307),
    但当用.f 输出double时, 它的精度在前16位,他只能保证前16位的精度,后面的就无法保证,因为一旦超过精度范围,就不能精确的描述该数据,不同的处理器对不能精确描述的部分的处理机制可能是不同的,这也就导致了在不同的平台上为什么一套代码的运行结果会不一致

    注意:
    printf()用%f输出double型,而scanf却用%lf
    严格地讲,%lf在printf下是未定义的,但是很多系统可能会接受它。
    要确保可移植性,就要坚持使用%f

    展开全文
  • 浮点数据类型

    2019-11-06 08:56:34
    文章目录1 浮点数据输出控制和精度1.1 浮点数据的输出控制1.2 浮点数据的精度 1 浮点数据输出控制和精度 1.1 浮点数据的输出控制 #include<iostream> #include<Windows.h> using namespace std; int ...

    1 浮点数的内存表示

    1.1 内存中的浮点数

    浮点数在内存中的存储方式为:符号位、指数、尾数。
    在这里插入图片描述
    float和double类型的数据在计算机内部的表示方法是相同的,但由于所占存储空间的不同,其分别能够表示的数值范围和精度不同。

    浮点数的特殊情况:
    在这里插入图片描述

    1.2 浮点数的转换

    浮点数的转换步骤:

    1. 将浮点数转换成二进制。
    2. 用科学计数法表示二进制浮点数。
    3. 计算指数偏移后的值。

    注意:计算指数时需要加上偏移量,而偏移量的值与类型有关。

    对于指数6,偏移后的值如下:

    • float:127 + 6 ⇒ 133
    • double:1023 + 6 ⇒ 1029

    转换示例:
    在这里插入图片描述
    通过unsigned int类型的指针将浮点数的内存表示打印出来:

    #include <stdio.h>
    
    int main()
    {
        float f = 8.25;
        
        unsigned int* p = (unsigned int*)&f;
        
        printf("0x%08X\n", *p);
        
        return 0;
    }
    

    1.3 浮点数的不连续

    思考:int和float都占4个字节的内存,为什么float却比int的范围大的多呢?
    在这里插入图片描述
    浮点类型的特点:

    • float能表示的具体数字的个数与int相同。
    • float可表示的数字之间不是连续的,存在间隙。
    • float只是一种近似的表示法,不能作为精确数使用。
    • 由于内存表示法相对复杂,float的运算速度比int慢得多。

    注意:double与float具有相同的内存表示法,因此double也是不精确的。由于double占用的内存较多,所能表示的精度比float高。

    1.4 浮点数的大数吃小数问题

    浮点数的加法需要先对阶,再计算,以0.5加0.125为例,计算过程如下:
    在这里插入图片描述
    我们可以看到在对阶的过程中,当大数比小数大很多时(大概是1600万倍时),小数由于右移而导致全部数据移出变为0。


    2 浮点数据输出控制和精度

    2.1 浮点数据的输出控制

    #include<iostream>
    #include<Windows.h>
    
    using namespace std;
    
    int main(void){
    	double value = 12.3456789;
    
    	// 默认精度是6,所以输出为 12.3457 
    	//(默认情况下,精度是指总的有效数字)
    	cout << value << endl; 
    
    	// 把精度修改为4, 输出12.35, 对最后一位四舍五入
    	// 精度修改后,持续有效,直到精度再次被修改
    	cout.precision(4);
    	cout << value << endl;
    
    	// 使用定点法, 精度变成小数点后面的位数
        // 输出12.3457
    	cout.flags(cout.fixed); 
    	cout  << value << endl;
    
    	// 定点法持续有效
        // 输出3.1416
    	cout << 3.1415926535 << endl;
    
    	// 把精度恢复成有效数字位数
    	cout.unsetf(cout.fixed);
    	cout  << value << endl;          //输出12.35
    	cout << 3.1415926535 << endl;  //输出3.142
    
    	system("pause");
    	return 0;
    }
    

    2.2 浮点数据的精度

    #include <Windows.h>
    #include <iostream>
    
    using namespace std;
    
    int main()
    {
    	float f = 0.123456789f;
    	double d = 0.123456789123456789;
    
    	cout.precision(9);
    	cout.flags(cout.fixed);	//输出0.123456791,float类型的数据精度为7位
    	cout << f << endl;
    
    	cout.precision(18);	//输出0.123456789123456784,double类型的精度为16位(测出来17位,巧合?)
    	cout << d << endl;
    
    
    	system("pause");
    	return 0;
    }
    

    参考资料:

    1. C语言进阶剖析教程
    2. C/C++从入门到精通-高级程序员之路【奇牛学院】
    展开全文
  • 浮点数据讲解

    千次阅读 2020-08-19 13:45:11
    以下内容摘抄字谭浩强老师的程序设计基础第五版3.2.5浮点数据 浮点数据是用来表示具有小数点的实数的。为什么在C语言中把实数称为浮点型数呢?在C语言中,实数是以指数形式存放在存储单元中的。一个实数表示为...

    以下内容摘自谭浩强老师的程序设计基础第五版3.2.5浮点型数据

    浮点型数据是用来表示具有小数点的实数的。为什么在C语言中把实数称为浮点型数呢?在C语言中,实数是以指数形式存放在存储单元中的。一个实数表示为指数可以有不止一种形式,如3.1459可以表示为3.14159×100,0.314159×101,0.0314159×102,31,14159×10-1,或314,159×10-2等,它们代表一个值。可以看到:小数点的位置是可以在314159几个数字之间、之前或之后(加0)浮动的,只要在小数点位置浮动的同时改变指数的值,就可以保证它的值不会改变。由于小数点位置可以浮动,所以实数的指数形式称为浮点数。
    浮点数类型包括float型(单精度浮点型)、double(双精度浮点型)、long double(长双精度浮点型)。
    (1)float型(单精度浮点型)。编译系统为每一个float型变量分配4个字节,数值以规范化的二进制数指数形式存放在存储单元中。在存储时,系统将实型数据分成小数部分和指数部分两个部分,分别存放。小数部分的小数点前面的数为0.如3.14159在内存中的存放形式可以用图3.11表示。
    在这里插入图片描述
    图3.11是用十进制数来示意的,实际上在计算机中时用二进制数来表示小数部分以及用2的幂次来表示指数部分的。在4个字节(32位)中,究竟用多少位来表示小数部分,多少位来表示指数部分,C标准并无具体规定,由各C语言编译系统自定。有的C语言编译系统以24位表示小数部分(包括符号),以8位表示指数部分(包括指数的符号)。由于用二进制形式表示一个实数以及存储单元的长度是有限的,因此不可能得到完全精度的值,只能存储成有限的精确度。小数部分占的位(bit)数愈多,数的有效字愈多,精度也就愈高。指数部分占的位数愈多,则能表示的数的数值范围愈大。float型数据能得到6位有效数字,数值范围为-3.4×10-38到3.4×1038
    (2)double型(双精度浮点型)。为了扩大能表示的数值范围,用8个字节存储一个double型数据,可以得到15位有效数字,数值范围为-1.7×10308到1.7×10308。为了提高运算精度,在C语言中进行浮点数的算术运算时,将float型数据都自动转换为double型,然后进行运算。
    (3)long double型(长双精度)型,不同的编译系统对long double型的处理方法不同,Turbo C对long double型分配16个字节。而Visual C++则对long double 型和double型一样处理,分配8个字节。请读者在使用不同的编译系统时注意其差别。

    说明:
    用有限的存储单元不可能完全精确地存储一个实数,例如float型变量能存储的最小正数为1.2×10-38,不能存放绝对值小于此值得数,例如10-40。float型变量能存储的范围见图3.12。即数值可以在3个范围内:(1)-3.14×10-38到-1.2×10-38;(2)0;(3)1.2×10-38到3.4×1038
    在这里插入图片描述

    展开全文
  • C#浮点数据类型

    2020-10-15 10:28:12
    文章目录 博主写作不容易,孩子需要您鼓励 ...注意: 浮点数有一定的取值范围和有效数字限制,超出规定范围数据是无法表示的。float类型精度为7位有效数字,因此float的值经常会有些误差。例如,10减去0.9得
  • 一、定点数据表示 1、可表示定点小数和整数 2、表示形式: 定点小数:X0 . X1X2X3X4.......XnX_0\ .\ X_1X_2X_3X_4.......X_nX0​ . X1​X2​X3​X4​.......Xn​ 定点整数:$X_0X_1X_2X_3X...
  • 浮点类型的数据范围

    千次阅读 2014-03-30 10:38:03
    #include //float.h 提供了浮点型的范围和精度的宏,没有类型和函数的定义,一般用于数值分析。 int main(int argc, const char * argv[]) {  printf("Double_type,max:%f\n",DBL_MAX);  pr
  • 基本数据类型也称为简单数据类型,Java语言中有八种基本数据类型, 分别为 boolean、byte、short、int、double、float、... 浮点类型 :float、double; 字符类型 :char; 以下进行逐一介绍这八种基本数据类...
  • 2.浮点型: float (4字节),double(8字节)(一般默认的double型) 3.字节型: char (2字节) 4.布尔型:boolean(2字节) 1.2字节定义 字节表示指一小组相邻的二进制数码,是计算机重要的数据单...
  • Java中的浮点数据类型

    万次阅读 2019-05-08 15:57:45
    Java的浮点类型有固定的表数范围和字段长度,字段长度和表数范围和机器无关。Java的浮点数遵循IEEE754标准,采用二进制数据的科学计数法来表示浮点数,对于float型数值,第1位是符号位,接下里8位表示指数,再接下来...
  • 最近做了一个小的上位机,要通过串口来下发几个时间参数,为了防止误输入,产生不必要的麻烦,我把输入范围限制在0-680的浮点数据,支持小数点后2位。学习了一下QLineEdit类是如何限制输入类型的。本来是想写一个...
  • 浅论定点DSP与浮点DSP的区别

    万次阅读 2018-04-02 20:43:54
    最近在研究的一个项目中必须要用到DSP处理器。...而浮点DSP处理器则计算精确,动态范围大,速度快,易于编程,功耗大,价格高。 1、宏观上的区别 从宏观上讲,浮点dsp比定点dsp的动态范围大得多。定点运算...
  • C语言数据类型浮点

    千次阅读 2019-03-06 22:05:20
    今天记下C语言的浮点数据类型。 浮点数据类型:单精度(float)和双精度(double)。两者的原理是一样的。 1. 第一步:如何求解原码、反码、补码 我们以8位计算。 正数的原反补都是一样的,所以只要把十进制转成二进制...
  • 摘要:Arduino串行接口,支持带有浮点数字数据支持的命令行接口串行波特率:9600 范围 上载固件后,该项目旨在为Arduino提供更大的灵活性。 该接口可以轻松地针对不同的应用进行定制,并允许通过串行接口设置不同的...
  • 浮点数据存储方式

    千次阅读 2018-12-10 17:51:51
    学习目标: ...浮点型作为Java基础数据类型,分为float和double两种类型,其中float类型占4个字节,32个bit位,double占8个字节,64bit位。先说float类型的存储方式,而double类型也可以以此类推。 ...
  • 数据格式(定点表示 浮点表示)

    千次阅读 多人点赞 2018-03-27 17:12:32
    浮点表示:小数点位置不固定(数值范围很大) 定点表示 概念:所有数据的小数点位置固定不变 表示方法:符号位+量值(尾数) 特点: 数的范围受字长限制,表示数的范围有限; 计算机中多用定点纯整数表示,所以将定点...
  •  第一,对于有效数字M,因为其值大于等于1而小于2,所以在计算机中,为了能够利用23位(52位)表示更多的数据,IEEE754规定保存M时默认这个数的第一位为1,所以只保存后面的部分(小数点后的位)。然后等到读取此数...
  • 串口发送接收浮点数据

    万次阅读 2018-09-13 15:25:49
    转自:... ... 在做下位机通信时往往会用到串口,包括下位机将数据传输给上位机,或者是下位机与下位机之间进行数据传输,这时候就会遇到发送数据的问题,单片机通过串口发送数据时...
  • 浮点型栅格数据在Arcgis中是无法计算得到属性表的。因此可以考虑先转换数据类型。以一个32位浮点数据为例: Camellia2.tif,磁盘存储空间为3.1GB 要统计不同数值范围所占面积,方法如下: 1、代数运算,保存...
  • 浮点数据精度不准确的探究

    千次阅读 2018-10-11 14:52:35
    1.浮点型的范围和精度 2.为什么浮点型会精度丢失 3.什么情况下我们可以使用浮点型 4.如何解决精度不准确的问题 浮点型 float和double都是我们常用的浮点型, 它们的范围是多少, 精度能精确到多少呢? float即单...
  • 浮点数据的存储方式

    千次阅读 2016-10-03 17:27:38
    C语言和C#语言中,对于浮点类型的数据采用单精度类型(float)和双精度类型(double)来存储,float数据占用32bit,double数据占用64bit,我们在声明一个变量float f= 2.25f的时候,是如何分配内存的呢?如果胡乱分配,...
  • Java数据类型

    千次阅读 2017-01-07 20:23:37
    Java数据类型 数据类型 基本数据类型 数值型 整数类型 byte short int long 浮点类型 float double 字符型 char 布尔型 boolean 引用数据类型
  • 浮点数据存储方式浅析

    千次阅读 2017-05-08 23:42:20
    学习目标: ① 搞懂float和double型数据...浮点型作为Java基础数据类型,分为float和double两种类型,其中float类型占4个字节,32个bit位,double占8个字节,64bit位。先说float类型的存储方式,而double类型也可以以
  • 【题目描述】 分别定义float,double类型的变量各一个,并依次输出它们的存储空间大小(单位:字节)。 【输入】 (无) 【输出】 ...一行,两个整数,分别是两个变量的存储空间大小,用一个空格隔开。...
  • 整型、浮点型和字符串数据类型

    千次阅读 2020-07-29 16:26:33
    关于整型、浮点型和字符串数据类型 区分它们 整型(或 int)数据类型表明值是整数;带有小数点的数,如 3.14,称为“浮点型”(或 float);带有" "或’ '的表明是字符串(或str)。 数学操作符 操作符 操作 ...
  • float类型数据跟以下要说的double类型数据都属于浮点类型数据,与以上的数据类型不同,以上都是整型数据。float是单精度数据,可以用来表示小数,虽然表示范围较大,但小数点后的精确度不高,占用4个字节,表示范围...
  • 关于浮点数据精度丢失的探究

    千次阅读 2017-04-30 20:44:30
    最近接手了一个新的项目, 项目中也涉及到了关于小数的计算, 项目中也并不是使用的Decimal来计算的, 所以又发现了浮点数据精度不准确的问题。
  • 浮点型又分float和double,float占用4个字节存储数据,精度范围大概为7位左右;double占用8个字节存储数据,精确范围大概为15位左右。 浮点型 创建浮点数表:直接float表示没有小数部分;float(M,
  • 设置一个能接受的精度,保证误差在精度范围内就可以了 #define EXP 0.0000000001 float f = 0.0000001; if(((f-21.0) > -EXP)&&((f-21.0) )) //判断f==21 { //就意味着f是无限接近0的数字,就约等于0 } ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 128,938
精华内容 51,575
关键字:

半浮点数据范围