VC++6.0环境中 单精度浮点型的有效位,双精度浮点型的有效位时多少?

C语言运行在 VC++6.0环境中, 单精度浮点型的有效位,双精度浮点型的有效位时多少?
例;
#include<stdio.h>
main()
{
float s,PI=3.1415912;
int r=5;
s=r*r*PI;
printf("s=%lf\n",s);
}
S 的值会跟着PI小数位的增多而变化,如果是七位有效,那再增加不就自动丢失吗 ,应该是不变的呀,为什么?

浮点数7位有效数字。
双精度数16位有效数字。

浮点数取值范围:
负数取值范围为 -3.4028235E+38 到 -1.401298E-45,正数取值范围为 1.401298E-45 到 3.4028235E+38。

双精度数取值范围:
负值取值范围-1.79769313486231570E+308 到 -4.94065645841246544E-324,正值取值范围为 4.94065645841246544E-324 到 1.79769313486231570E+308。

C/C++中浮点数的表示遵循IEEE 754标准。
一个浮点数由三部分组成:符号位S、指数部分E(阶码)以及尾数部分M(如下)。
Floating
S--------E-------M
1位-----8位-----23位

Double
S--------E-------M
1位-----11位----52位

十进制数的换算计算公式为(n^m表示n的m次幂,B表示前面的数字是二进制):

S * 2^(E-127) * (1.M)B

浮点数的精度取决于尾数部分。尾数部分的位数越多,能够表示的有效数字越多。

单精度数的尾数用23位存储,加上默认的小数点前的1位1,2^(23+1) = 16777216。因为 10^7 < 16777216 < 10^8,所以说单精度浮点数的有效位数是7位。

双精度的尾数用52位存储,2^(52+1) = 9007199254740992,10^16 < 9007199254740992 < 10^17,所以双精度的有效位数是16位。

另外:
如果你在PI值的有效位后增加数字的话,结果是不会变化的,由于PI值是以常数方式赋值,可以在常数后面加个'f',如PI = 3.1415926f;否则编译器会先把常数当作double类型,然后再截断后面的值变为浮点值,这样的话,就有可能PI的值会有不同,造成你看到的现象。
温馨提示:内容为网友见解,仅供参考
第1个回答  2006-11-07
Type Range of Values
float 3.4E +/- 38 (7 digits)
double 1.7E +/- 308 (15 digits)
第2个回答  2006-11-07
float取值范围10负38到10正38,提供7位有效数字
double取值范围10负308到10正308提供16还是19位有效数字(记不清了)

在VC++6.0上使用c语言编程,单精度浮点型和双精度浮点型为何都只能精确到...
其实就是有效位数不一样。浮点型变量分为单精度(float)、双精度(double)和长双精度(long double)3类。在Turbo C 中:比特(位)数 有效数字 float 32 6-7 double 64 15-16 long double 128 18-19 ANSI C 并未具体规定每种类型数据的长度、精度、数值范围,有的系统将double所增加的32位全...

float和 double在vc6.0里输出多少位
Float为单精度,内存中占4个字节,有效数位是7位(因为有正负,所以不是8位),在我的电脑且VC++6.0平台中默认显示是6位有效数字;double为双精度,占8个字节,有效数位是16位,

C语言四舍五入的问题???
没能正确地做四舍五入是因为有效数字个数超出 double 允许范围,尾部数据不精确了。有效数字少一点时,我的编译器(VC++ 6.0) 好像能做四舍五入。例如:include<stdio.h> include<stdlib.h> main(){ double a,b,c,d;a=1.12345;b=-1.12345;c=1.12344;d=-1.12344;printf("a=%.4lf ...

c++中单精度与双精度的区别
Float内存中占4个字节,有效数位是7位(因为有正负,所以不是8位),VC++6.0平台中默认显示是6位有效数字;double占8个字节,有效数位是16位,但在VC++6.0平台中默认显示同样是6位有效数字。所以两者在实际显示效果是一样的。还有,我按你那三个数字分别用double和float试验过,输出结果都跟预期的...

c++中单精度浮点跟双精度浮点怎么区分
当表中需要存储精度较高、位数固定的数值或者存储真正的浮点数值时请使用双精度型数据代替数值型数据 单精度浮点型是为了提供兼容性,浮点数据类型在功能上等价于数值型。 追问: 套用这题,如果double改成float行不行 回答: float是16位,double32位,没超过16位就可以用float ...

双精度实型
简单来说,Float为单精度,内存中占4个字节,有效数位是7位(因为有正负,所以不是8位),在我的电脑且VC++6.0平台中默认显示是6位有效数字;double为双精度,占8个字节,有效数位是16位,但在我的电脑且VC++6.0平台中默认显示同样是6位有效数字(见我的double_float文件)还有,有个例子:在C...

C++中 double、 long double表示的数据范围一样那他们有什么区别_百 ...
在很多编译器中,double的精度不如long double。在VC6.0中double和long double一样都是分配8个字节,15位有效数字;但是在GCC中long double分配12个字节,精确度自然就比double高出四个数量级。double,即double float数据类型,是双精度浮点型的数据。计算机中表示实型变量的一种变量类型。此数据类型与...

c++中,float double区别
一、精度的区别 float为单精度,内存中占4个字节,有效数位是7位。double为双精度,占8个字节,有效数位是16位。二、指数和尾数长度的区别 float指数长度为8位,尾数长度23位。double指数长度为11位,尾数长度52位。三、取值范围的区别 float的取值范围为3.4E-38~3.4E+38。double的取值范围为1.7E...

在c#中单精度是什么意思,双精度是什么意思
数据类型。指有小数的数据类型,单精度的数据类型是用4个字节表示的,双精度的数据类型是用8个字节表示的。

单精度数据值类型符是
单精度数据值类型符是float float浮点型(单精度) 占用4字节,数的表示范围是-3.4*10^38 ~~3.4*10^38,有效位为7位。double双精度型 占用8字节,数的表示范围是-1.7*10^308 ~~1.7*10^308,有效位为15位。

相似回答