c语言中什么是单精度型和双精度型???各举个例子。。。

 我来答
a864567085
2019-07-17 · TA获得超过527个赞
知道答主
回答量:8
采纳率:0%
帮助的人:1万
展开全部

单精度型和双精度型的区别在于它们的精确程度不一样,也就是小数部分的有效位数不一样。

单精度数(float型)在32位计算机中存储占用4字节,也就是32位,有效位数为7位,小数点后6位;双精度数(double型)在32位计算机中存储占用8字节,也就是64位,有效位数为16位,小数点后15位。

比如3.1415926535897932384这个小数,如果定义成float型,那么只会留下小数点后5位,也就是3.141592,如果定义成double型,那么只会留下小数点后15位,也就是3.141592653589793。

扩展资料

计算机的数都是以二进制进行存储。无论是单精度浮点数还是双精度浮点数,在计算机上的存储都遵循IEEE 754规范,使用二进制科学计数法

二进制科学计数法包含三个部分:符号位,指数位和尾数部分。单精度数的符号位,指数位和尾数部分分别为1,8,23,而双精度为1,11,52。

而单双精度中的精度就主要取决于尾数部分的位数。float的尾数尾数为23位,除去全部为0的情况以外,最小为2的-23次方,因此float小数部分只能精确到后面6位。类似的,double尾数位数为52,最小为2的-52次方,因此只能精确到小数点后15位。

参考资料来源:百度百科-单精度浮点数

参考资料来源:百度百科-双精度浮点数

富港检测技术(东莞)有限公司_
2024-06-06 广告
单精度和双精度都指浮点数,就是带小数点的数 只不过单精度和双精度是为了区分有效数而已(也就是精确度),它的提法完全符合科学计算中对于数值的观念。 比如:单精度/双精度数值类型从一开始设计的时候,就不是一个准确的数值类型,他只保证在他... 点击进入详情页
本回答由富港检测技术(东莞)有限公司_提供
金色潜鸟
推荐于2017-10-01 · TA获得超过3.2万个赞
知道大有可为答主
回答量:1.3万
采纳率:89%
帮助的人:5158万
展开全部
c语言中 单精度型和双精度型 指两种 类型 的 浮点数。
单精度型 即 float 型, 有效数字约10进制7位
双精度型 即 double 型, 有效数字约10进制15位
所以能描述的数值精度不同。
c语言 数据 用 IEEE 754 国际标准。float 型 用 4 字节存放,double 型 用 8 字节存放。
Single Precision 2进制: 数符1位,指数8 位,尾数 23 位
Double Precision 2进制: 数符1位,指数11 位,尾数 52 位
单精数值范围: ± ~10的-44.85次方 到 约 10的38.53次方
双精度数值范围 ± ~10的-323.3 次方 to 约 10的 308.3次方。
float a=1.234567;
double b=1.2345678901234;
-------------
10%3 整除取余数,得 1。
1 用 float 和 double 表示,精度没有区别。 a=(float)(10%3); b=(double)(10%3);
强制转换 要带 小括号。
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
terranlong
2013-01-02 · TA获得超过7292个赞
知道大有可为答主
回答量:2660
采纳率:0%
帮助的人:3841万
展开全部
单精度就是float类型,是4个字节的,因此精度没有那么高
双精度就是double类型,是8个字节的,可以表示的数字当然就更多,小数点后面的精度也越高

float f; // 是4个字节的单精度变量
double d; // 是8个字节的双精度变量
追问
float(10%3)   double (10%3)结果有什么不同啊??
追答
当然有不同,虽然都是10%3=3,但是前者强制转换成float类型,是4个字节的,而后者强制转换成double类型,是8个字节的。4个字节和8个字节,区别大吧,精度当然差很多
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
程序猿3号
2013-01-02 · TA获得超过1810个赞
知道小有建树答主
回答量:1029
采纳率:33%
帮助的人:732万
展开全部
float是单精度型,double是双精度型,例子:
float a;
double b;
。。。。。。。。。。。
追问
float(10%3)   double (10%3)结果有什么不同啊??
追答

你这样是看不出结果的,你在用10(注意这是个整形数)%3的时候,结果先是强制转换为整形,也就是1(这是个整形数),接着再用float或者double进行强制转换也不会有精度问题,所以这样是看不出来的,你可以这样查看单精度和双精度数:

printf("%.15f\n%.15lf", float(10.0/3), double(10.0/3));

强制float和double输出小数点以后15位数据,你就可以看到这样的结果:

看,float型数据在小数点6位后就乱码了,这样明白了吧。

对了你如果用10/3这样也是不行的,它强制输出的是整形。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
johnbhy
2013-01-02 · 超过20用户采纳过TA的回答
知道答主
回答量:63
采纳率:0%
帮助的人:23.6万
展开全部
float(10%3)结果是1.000000即七位小数点后保留。
double (10%3)就是15位。
说到底就是个精度的问题

望采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式