① c语言里单精度和双精度怎么理解
单精度和双精度顾名思义是两种精度的不同划分,单精度float是保证7位有效数字,double是保证16位有效数字。
例:(float)(10%3)
结果是1.000000即七位有效数字,(后面不一定全是0,计算机可随机选择数字,所以整数1不等于float或double的1)
(double)(10%3)
同理结果是:1.XXXXXXXXXX……后面有十五位的有效数字
虽然整数位都是1,但由于有效位数不同,即后面随机派出的小数可能不同,所以二者理论上不同,实际比较不能用==,要用fabs()<1e-6.
② C语言双精度的格式符是%le还是%lf
都可以,只是输出形式有所不同,%lf是以普通的浮点数的方式输出,而%le是以科学计数法的形式输出。
例如:
int main()
{
double n;
scanf("%lf",&n);
printf("浮点数的方式%lf 科学计数法的方式%le",n,n);
return 0;
}
输入:123.4556666
浮点数的方式123.455667 科学计数法的方式1.234557e+002
(2)c语言双精度用啥扩展阅读:
单精度浮点数(float)与双精度浮点数(double)的区别如下:
1,在内存中占有的字节数不同
单精度浮点数在机内占4个字节
双精度浮点数在机内占8个字节
2,有效数字位数不同
单精度浮点数有效数字7位
双精度浮点数有效数字16位
3,所能表示数的范围不同
单精度浮点的表示范围:-3.40E+38 ~ +3.40E+38
双精度浮点的表示范围:-1.79E+308 ~ +1.79E+308
4,在程序中处理速度不同
一般来说,CPU处理单精度浮点数的速度比处理双精度浮点数快。
参考资料来源:网络-双精度浮点数
③ C语言如何输入双精度数据
C语言用scanf()函数输入双精度数据时,采用的数据格式参数必须是%lf,如:
doubled;
scanf("%lf",&d);
scanf("%f,%f",&a,&b);不能输入双精度数据吗?
当然不能。主要原因在于double和float类型的大小不同:
double类型数据在内存中存储占8字节(64位),按IEEE754标准存储,格式为:1位符号位+11位指数位+52位小数位
float类型数据在内存中存储占4字节(32位),按IEEE754标准存储,格式为:1位符号位+8位指数位+23位小数位
当输入数据格式串为%f时,scanf()按float类型将输入的数据存储到内存地址中,这时,若再按double类型解释输出数据时,数据当然不是用户输入的内容了。
④ C语言什么是单精度、双精度
C语言中用float描述单精度,用double描述双精度。为什么要把数据分成单双精度呢?我们生活中通常用到数据时会说精确到小数点后几位,计算机存储数据时精确度越高,占用内存空间越大,根据精确度的需要,如果你选用单精度数据,是说你让电脑用较少的空间存放数据,表现为精确到小数点后5位,并且第五个小数还是四舍五入得到的,如果你用双精度定义数据,是说你用较多的空间存放同一个数,表现为小数点后较多的位数,同样最后一位仍然是四舍五入得到。这就是区分单双精度的原因。
⑤ c语言中单精度和双精度是什么
单精度和双精度是这对浮点运算来说的,也就是通常说的小数,单精度浮点最少有小数点后6位,双精度至少是小数点后10位,应为编译器或者平台不同说以小数点后面多少位是不同的,当是C语音已经规定了小数点后几位最小的值,最大有多少要看具体的系统来定
⑥ c语言数据类型中“双精度”“单精度”是什么意思
1、单精度和双精度都指浮点数,就是带小数点的数
2、单精度数的有效位数比较少,7位左右,双精度的在几十位。
3、单精度定义是用float
4、双精度定义是用double
比如:
#include
main(){
float
pi_f
=
m_pi;
double
pi_d
=
m_pi;
printf("%e,",pi_f);
printf("%e",pi_d);
}
⑦ C语言中单双精度数表示什么意思
C语言中的单双精度主要是用在表示小数上...单精度类型是float,双精度类型是double
,他们表示的是小数的有效数字的多少...单精度的有效数字是7位..因此当小数的超过7位有效数字的时候他表示小数的精确度也不是很高...双精度的有效数字是14位...比单精度高一倍..因此他表示的精确度也就相对很高
....
在选择使用单双精度类型时...就要考虑好小数的长度问题...因为双精度的精确度虽然高..但相对的,他分配到的内存也会相对较多...对程序的运行也没有好处