float 单精度浮点数在机内占 4 个字节,用32 位二进制描述。
double 双精度浮点数在机内占 8 个字节,用64 位二进制描述。
浮点数在机内用指数型式表示,分解为:数符,尾数,指数符,指数四部分。
数符占 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,我