menu Secto白帽博客-专注于技术研究
C/C++浮点型常量与变量
739 浏览 | 2020-03-15 | 分类:C/C++,程序设计 | 标签:C/C++,C,C++

浮点型数据

1.浮点型常量

(1)十进制小数形式:有数字与小数点组成。列如:3.4 4. 0 .5 .8
(2)一般对于非常大或者非常小的数值,常用指数形式表示其表示为:十进制小数+e(E)+十进制整数。
比如:
13.5e-6 表示13.5*10负六次方
0.3E3 表示0.3*10立方

2.浮点型变量

1.浮点型变量数据的存储形式

浮点型常量在内存中是以二进制浮点形式并储存的。
编译系统采用类似十进制的科学表示法编码,列如
124.334表示为0.124334*10立方即0.124334e3
+| 03124334 |3
上面是用十进制来表示的实际存储中使用二进制来表示符号和小数部分,用2的幂次方表示指数部分。
一个浮点型数据所占的字节中那些位表示小数部分,哪些位表示指数部分,由C编译系统决定。小数部分所占位数越多,数据的精确度越高,而精确度高,有效位数也就越多;而指数部分所占的位数多的话,能表示数值的范围也越大。

2.浮点型数据分类

C语言中浮点型数据分为两类:
①单精度型:类型标识符为float,一般是占4个字节(32位),取值范围约在3.410-38次方,取值大约在3.4-38次方,提供7位有效数字。
②双精度型:类型标识符为double,一般占8个字节(64位)
取值范围约在1.710-308次方~1.710(308次方)提供16位有效数字。

3.浮点型变量的定义及使用

浮点型变量的定义:
浮点型类型标识符 变量名1 [,变量名2,变量名3...];
实型常量在内存中都以double型存储。一个实型常量可以赋给一个float或者double型变量,但是如果将一个实型常量赋给一个float型变量时,列如:

float a;
a=3.42;

程序编译时往往会报一个警告错误(Warning),可以不理
不管是单精度还是双精度在内存字节都是有限的,这就代表他不能包括所有的实数,比如一些实数太大了或者太小,而一些实数的精确度要求太高了,超出有效数字位数以外的就会被认为无效数字。

3.浮点型变量精度

浮点型变量在使用中注意两个数据相差不能大

#include<stdio.h>
main(){ 
  float a,b;
  a=1235578550.456789;
  b=a+20;
  printf("a=%f,b=%f",a,b);
  return 0;
}

程序运行结果:a=1235578496.000000,b=1235578496.000000
为什么会出现这个结果?
a+20的值应该是1235578570,但是因为变量a的值比20大的很多 ,而单精度浮点型变量只能保证有效数字是7位,7位以后都是无意义的因此并不能准确地表示该数,所以运行时20加后几位数是无意义的。所以运行时应该避免将一个很大的数和一个较小的数做运算,否则较小的数会丢失。
虽然这样但是C语言绝对可以表示足够多的实数,以执行大部分精度相当计算。

By:海螺HL
Time:2020/3/15

知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议

发表评论

email
web

全部评论 (暂无评论)

info 还没有任何评论,你来说两句呐!