C语言的,关于有效位数的

Python012

C语言的,关于有效位数的,第1张

在IEEE754标准中进行了单精度浮点数(float)和双精度数浮点数(double)的定义。float有32bit,double有64bit。它们的构成包括符号位、指数位和尾数位。

这些位的构成如下:

种类-------符号位-------------指数位----------------尾数位----

float---第31位(占1bit)---第30-23位(占8bit)----第22-0位(占23bit)

double--第63位(占1bit)---第62-52位(占11bit)---第51-0位(占52bit)

取值范围主要看指数部分:

float的指数部分有8bit(2^8),由于是有符号型,所以得到对应的指数范围-128~128。

double的指数部分有11bit(2^11),由于是有符号型,所以得到对应的指数范围-1024~1024。

由于float的指数部分对应的指数范围为-128~128,所以取值范围为:

-2^128到2^128,约等于-3.4E38 — +3.4E38

精度(有效数字)主要看尾数位:

float的尾数位是23bit,对应7~8位十进制数,所以有效数字有的编译器是7位,也有的是8位

1.这是c语言中的强制类型转化问题。在有不同类型的量参与运算时,一律先强制类型转化成一致的类型再运算。转化规则是以最高级别的类型为基准。由低向高转化。类型的级别从低到高排列依次为:char->int->long int ->float->double

2.因为双精度的数,其有效位比单精度更多,有效位越多,当然计算的结果越精确。但是有效位越多,数据处理也就越多,因而运算速度会降低。

在c中浮点型常量如果没有说明,一律看做是double型。有说明的除外,如:

3.21f,这个就是float型。

C语言中的有效位数不是平时我们说的小数点后面的有效数字,而是指所有的数字,比如:123.456是从1开始的。如果数据类型是float型,那么有效位数是7位,也就是说存储float b=123.4567891只能保证前7位是正确的,即我们取出b时它的前7位完全没问题就是123.4567,但是后面的就不知道是什么了。如果是double型数据,则有效位数是15位,存储时类似于float型。