浮点数在机内用指数型式透露,分化为:数符,尾数,指数符,指数四部门。
数符占 1 位二进制,透露数的正负。
指数符占 1 位二进制,透露指数的正负。
尾数透露浮点数有效数字,0.xxxxxxx, 但不存开首的 0 和点。
指数存指数的有效数字。
指数占几多位,尾数占几多位,由较量机系统决意。
或者是数符加尾数占 24 位,指数符加指数占 8 位 -- float。
数符加尾数占 48 位,指数符加指数占 16 位 -- double。
知道了这四部门的占位,按二进制估量巨细局限,再换算为十进制,就是你想知道的数值局限。
对编程人员来说,double 和 float 的区别是 double 精度高,有效数字 16 位,float 精度 7 位。但 double 消费内存是 float 的两倍,double 的运算速度比 float 慢得多,C 说话中数学函数名称 double 和 float 分歧,不要写错,能用单精度时不要用双精度(以省内存,加速运算速度)。
类型比特数有效数字数值局限float326-7-3.4*10(-38)~3.4*10(38)double6415-16-1.7*10(-308)~1.7*10(308)long double12818-19-1.2*10(-4932)~1.2*10(4932)
简洁来说,Float 为单精度,内存中占 4 个字节,有效数位是 7 位(因为有正负,所以不是8位),在我的电脑且 VC++6.0 平台中默认显露是6位有效数字;double为 双精度,占 8 个字节,有效数位是 16 位,但在我的电脑且 VC++6.0 平台中默认显露同样是 6 位有效数字
例子:在 C 和 C++ 中,如下赋值语句:
float a=0.1;
编译器报错:warning C4305: 'initializing' : truncation from 'const double ' to 'float '
原因: 在 C/C++ 中(也不知道是不是就在 VC++ 中如许),上述语句等号右边 0.1,我们认为它是个 float,然则编译器却把它认为是个 double(因为小数默认是 double),所以要报这个 warning,一样改成 0.1f 就没事了。
本人平日的做法,经常使用 double,而不喜欢使用 float。
C 说话和 C# 说话中,对于浮点类型的数据采用单精度类型 float 和双精度类型 double 来存储,float 数据占用 32bit, double 数据占用 64bit,我们在声明一个变量 float f= 2.25f 的时候,是若何分派内存的呢?若是胡乱分派,那世界岂不是乱套了么,其实岂论是 float 照样 double 在存储体式上都是顺从 IEEE 的规范 的,float 顺从的是 IEEE R32.24 ,而 double 顺从的是 R64.53。
无论是单精度照样双精度在存储中都分为三个部门:
符号位(Sign):0 代表正,1 代表为负。
指数位(Exponent):用于存储科学计数法中的指数数据,而且采用移位存储。
尾数部门(Mantissa):尾数部门。
起原地址:https://my.oschina.net/zd370982/blog/724265
← C/C++ 获取键盘事件
Java 接口和多态 →
1 篇笔记TRDSF
429***435367@qq.com
C++ 中 float 与 double 类型的精度区别
double 精度高,有效数字 15-16 位,float 精度低,有效数字 6-7位,然则 double 消费的内存是 float 的两倍,运算速度比 float 慢得多,建议能用 float 包管精度的就用 float,罕用 double。
#include
#include
using namespace std;
int main()
{
float a=12.257902012398877;
double b=12.257902012398877;
const float PI=3.1415926; // 常量界说
cout<
cout<
cout<
return 0;
}