C语言中浮点数的精度问题

Python013

C语言中浮点数的精度问题,第1张

如果你输入的时候用%f,那么可能编译能通过,但是会有警告,运行的时候就会出现问题,因为你要是按%f输入一个浮点类型的数,那么存储变量的时候,每个变量会占四个字节,而当你用到变量时,是double类型的,会出去八个字节,这八个字节可能四个是你输入的,剩下的那四个就是属于垃圾数据了,所以不行,而当你用%lf输入时,存储是八个字节,用的时候也是八个字节,所以就没问题了。

在C语言源码中,只能在浮点数后面加f来表示单精度浮点数。例如:float f=1.0f\x0d\x0a单精度浮点数(Single)\x0d\x0a用来表示带有小数部分的实数,一般用于科学计算。\x0d\x0a占用4个字节(32位)存储空间,包括符号位1位,阶码8位,尾数23位。其数值范围为-3.4E38~3.4E38,单精度浮点数最多有7位十进制有效数字,单精度浮点数的指数用"E"或"e"表示。\x0d\x0a单精度浮点数有多种表示形式:±n.n(小数形式) ±n E ±m(指数形式) ±n.n E ±m (指数形式)\x0d\x0a如果某个数的有效数字位数超过7位,当把它定义为单精度变量时,超出的部分会自动四舍五入。\x0d\x0a双精度浮点数(double)\x0d\x0a用8个字节(64位)存储空间,包括符号位1位,阶码11位,尾数52位。

浮点数不是连续值,有一定精度,特点是动态范围大。它还没有int的精度高,因为int是32位表示,float只有23位有效值,其他是符号位和指数。

既然计算得不到12.10,就是浮点数不能精确表示12.10。

c

=

12.099998精度也很高了,只差0.000002,差值很小了