为了账号安全,请及时绑定邮箱和手机立即绑定

“浮动”与“双”精度

“浮动”与“双”精度

C
泛舟湖上清波郎朗 2019-07-22 16:41:13
“浮动”与“双”精度密码float x  = 3.141592653589793238;double z = 3.141592653589793238;printf("x=%f\n", x);printf("z=%f\n", z);printf("x=%20.18f\n", x);printf("z=%20.18f\n", z);会给你输出x=3.141593z=3.141593x=3.141592741012573242z=3.141592653589793116在第三行输出741012573242是垃圾,在第四行116是垃圾。双打总是有16个重要数字,而浮标总是有7个重要数字吗?为什么不双倍有14个重要数字呢?
查看完整描述

3 回答

?
一只斗牛犬

TA贡献1784条经验 获得超2个赞

C中的浮点数IEEE 754编码。

这种类型的编码使用符号、意义和指数。

由于这种编码,许多数字将有小的变化,以允许它们被存储。

此外,有效数字的数目也可能略有变化,因为它是二进制表示,而不是十进制表示。

单精度(浮点)给你23位的意义,8位的指数,和1符号位。

双精度(双)给出了52位的显着性,11位的指数,1位的符号位。


查看完整回答
反对 回复 2019-07-22
?
冉冉说

TA贡献1877条经验 获得超1个赞

双打总是有16个重要数字,而浮标总是有7个重要数字吗?

没有。双打总是有53个重要的位元浮标总是有24个显著的位元(除了非正态值、无穷大值和NaN值之外,这些都是另一个问题的主题)。这些是二进制格式,您只能用二进制数字(位)清楚地说明它们表示的精度。

这类似于一个二进制整数可以存储多少位数的问题:一个无符号的32位整数可以存储多达32位的整数,这并不能精确地映射到任何数量的十进制数:所有9位以下的整数都可以存储,但也可以存储很多10位数的数字。

为什么不双倍有14个重要数字呢?

双比特的编码使用64位(符号为1位,指数为11位,显式有效位为52位,隐式位为1位),即双倍用来表示浮点数(32位)的位数。


查看完整回答
反对 回复 2019-07-22
  • 3 回答
  • 0 关注
  • 433 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信