c语言float精度
A. 在c语言中float数据数值范围是多少
C语言中,float 为单精度浮点数,占4字节,其数值范围为3.4E-38 ~3.4E+38或者-(3.4E-38 ~3.4E+38)
float的指数位有8位,尾数位有23位,符号位1位。
于是,float的指数范围为-127~+128,按补码的形式来划分。
其中负指数决定了浮点数所能表达的绝对值最小的非零数;而正指数决定了浮点数所能表达的绝对值最大的数,也即决定了浮点数的取值范围。
所以,float的范围为-2^128 ~ +2^128,也即-3.40E+38 ~ +3.40E+38
B. c语言 float类型保留几位啊 怎么确定
float类型默认保留小数点后6位,若是要输出一位或者其他位数,可以按照以下形式进行输出:
printf("%.(这里输入要输出的位数)f",x);
如输出一位:printf("%.1f",x);
实例
#include <stdio.h>
#include <float.h>
int main()
{
printf("float 存储最大字节数 : %lu ", sizeof(float));
printf("float 最小值: %E ", FLT_MIN );
printf("float 最大值: %E ", FLT_MAX );
printf("精度值: %d ", FLT_DIG );
return 0;
}
C. float在C语言中是什么意思具体的。double呢谢谢!
float在C语言中是 单精度浮点数, double 是双精度浮点数。它们精度不同,能表示的数值范围大小不同。
单精度浮点数,4字节, 字长32位,有一位符号位,指数位共8位,尾数共23位。 指数能够表示的指数范围为-128~127。float的精度为6~7位有效数字。 float的范围为-2^128 ~ +2^128,也即-3.40E+38 ~ +3.40E+38。
double: 8字节, 字长64位,有一位符号位 11bits(指数位), 52bits(尾数位),指数能够表示的指数范围为 -1023~+1024。double的精度为15~16位。double的范围为-2^1024 ~ +2^1024,也即-1.79E+308 ~ +1.79E+308。
===
在程序中,它们可用于声明变量类型,例如 float a=1.23; double d=123.45; 。
若带小括号, 例如:x = (float) b; y=(double) c; 则表示 类型强制转换。
若在注解行中 , 例如: /* vx is float type, z is double type */ 则为注解。
若用双引号括起来,则是字符串,例如:
char s1[]="This is float !", s2[]="That is double !"; //字符串常量。
D. c语言float的精度问题
因为float的有效数字是7位数字,以后的就会不正常,如果你想输出正常的数值,可以定义成double类型
E. c语言中float型的精度问题
浮点数不是连续值,有一定精度,特点是动态范围大。它还没有int的精度高,因为int是32位表示,float只有23位有效值,其他是符号位和指数。
既然计算得不到12.10,就是浮点数不能精确表示12.10。
c
=
12.099998精度也很高了,只差0.000002,差值很小了
F. C中的float和double的有效数字和精度各是多少
float和double是有IEEE标准的,不是C语言定的,其它语言也一样。
double型90%的情况下有效位是16位的10进制数据是对的。来一段lua程序:
local b= 9007199254740991
print("b="..string.format("%d", b))
for i=1,10 do
print("i="..i..",b+i="..string.format("%d", b+i))--打印的全是偶数
end
for i=1,10 do
print("i="..i..",b-i="..string.format("%d", b-i))--打印正确
end
由此可见,大于9007199254740991(2进制52位最大的数),从2^53开始误差就大于1。