目录
一.基本概念
二.声明和初始化
三.浮点数上溢和下溢
浮点数在数据类型上一共就两个,一个是float,另一个是double。但两个唯一的区别就在于double精度方面是float的两倍
一.基本概念
首先介绍浮点数的三种书写形式
第一种 数字 :10364.0(%f)
第二种 科学计数法: 1.0364×104(没有)
第三种 指数计数法: 1.0364e4(%e)
C99又添了十六进制表示浮点型常量,即用十六进制前缀(ox),用p代替e,用2次幂代替10次幂
如0xa.1fp10(%a)
0xa.1fp10 = (10 + 1/16 + 15/256) * 1024 = 10364
我这边编译器精度不同,所以十六进制那边有点不一样,大家可以在自己电脑上面看看自己是否是0xa.1fp10
在C标准中规定,float必须能表示六位数字(不是小数点6位数字,包括小数点前面的),double至少能表示13位有效数字。
float:占32位,其中8位用于表示指数的值和符号,剩下24位用来表示非指数部分(我们也称位尾数或有小数)
double:占64位,这32位多出来的一般都用于表示非指数部分
long dougle:满足比double类型更高的精度要求。不过,C只能保证long double类型至少和double类型的进度一致。
平常基本用float类型就够了,但如果对精度要去高则选择double则可以。它们的占位符都是%f
二.声明和初始化
这里我们重点讲解下 some = 4.0 * 2.0; 这里系统在内部运行时通常把4.0 和 2.0被存储在64位的double类型,使用双精度进行乘法运算,然后被乘积的结果截断成float类型的宽度。这样做虽然计算精度更高,但是会减慢程序的运行苏速度。如果不想则在浮点数后面加上F后缀来进行float相乘,想用long double 就用L
如some = 4.0F * 2.0F;some = 4.0L * 2.0L
还有特别提醒一下啊,把一个类型的数值初始化给不同类型的变量时,编译器会把值转换成为与变量匹配的类型,这将导致部分数据丢失比如int cost = 12.99 用double类型的值初始化int类型的变量
三.浮点数上溢和下溢
这里只要只要当计算数字过大,会超出当前类型能表示的范围时,就会产生上溢,printf()显示该值inf或infinity
而当一个很小的数继续相除,尾数部分的位向右移,则会容易损失原来尾部有效位上的数字,因为在假定中这个数已经是最小的了,而在这个基础上还假设更下,我们叫这种浮点数叫坐低于正常的浮点数。这就是下溢。
好了朋友们我们今天的内容到这就结束了,今天的内容到这里就结束了,如果有啥不会的朋友记得论坛里面提问哈~
如果朋友你感觉文章的内容对你有帮助,可以点赞,关注文章和专栏以及关注我哈,嘿嘿嘿我会定期更新文章的,谢谢朋友你的支持哈