double-precision floating-point format 双精度浮点格式
双精度浮点格式,也称 FP64 或 float64,是计算机的一种数字格式。通常在内存中占 64 位,且使用浮动的小数点来表示较宽的数值范围。
在 IEEE 754-2008 标准中,64 位 base-2 格式被正式称为 binary64。它在 IEEE 754-1985 中被称为 double。
IEEE 754 也指定了其它浮点格式,包括 32 位 base-2 单精度和最近的 base-10 表示。
最早提供单/双精度浮点数据类型的编程语言之一是 Fortran。在广泛采用 IEEE 754-1985 之前,浮点数据类型的表示和属性取决于计算机制造商、计算机模型以及编程语言的实现者(比如 GW-BASIC 的双精度数据类型是 64 位 MBF 浮点格式)。
IEEE 754 double-precision binary floating-point format: binary64 IEEE 754 双精度二进制浮点格式: binary64
双精度二进制浮点数,即 binary64,通常简称为 double。IEEE 754 标准规定 binary64 有:
“有效数”也称尾数或系数,它是浮点表示或科学记数法中的一部分,由有效数字组成。
64 bits = 1 + 11 + 52
其中,符号位决定了数字本身的符号。指数是偏差指数,需要减去差值 1023(详见下一节“偏差指数”)。有效数精度是52位显式存储加1个隐藏位(值固定是1),所以能表示 53 位。
在 IEEE 754 浮点数中,指数在工程意义上是有偏差的,也称偏差指数。
之所以有偏差,是因为指数必须是“有符号”的值才能同时表示微小值和巨大值,但二进制补码(通常表示有符号值)会让比较变得更加困难。为了解决这个问题,指数被存储为适合比较的“无符号值”,然后在解释的时候“减去偏差”就转成有符号范围内的指数了。
偏差的值是 2k-1-1,其中 k 是指数的位数。比如:
双精度浮点数的指数字段是 11 位无符号整数,值从 0 到 2047。由于全 0 和全 1 的指数值是为特殊数字保留的,所以可用的指数值是从 1 到 2046。减去指数偏差值 1023,就能得到指数的实际范围,即从 -1022 到 +1023。
1 - 1023 = -1022 2046 - 1023 = +1023
科学记数法
科学记数法是一种记数方法。比如:
十进制表示法 | 科学记数法 |
---|---|
0.00000000751 | 7.51*10-9 |
0.00001 | 1*10-5 |
0.2 | 2*10-1 |
2 | 2*100 |
4321.768 | 4.321768*103 |
−64000 | -6.4*104 |
8100000000 | 8.1*109 |
在科学记数法里,基数可以是 2, 10, 16*
上表是基数为 10 的科学记数法
当数字过大或者过小的时候,用十进制表示通常要写一长串数字,此时用科学记数法就比较方便了。科学家、数学家和工程师们通常使用十进制的科学记数法,部分原因是它可以简化某些算术运算。
在十进制的科学记数法里,非零数字的写法是:a * 10n,其中 1≤|a|<10,n 是整数。
在计算机存储中,更常见的是二进制的科学记数法,即 a * 2n,其中 a 是由 0 和 1 组成的二进制表示,n 是整数。比如:
十进制数字 | 二进制表示 | 二进制科学记数法 |
---|---|---|
1 | 1 | 1*20 |
2 | 10 | 1.0*21 |
3 | 11 | 1.1*21 |
4 | 100 | 1.00*22 |
5 | 101 | 1.01*22 |
6 | 110 | 1.10*22 |
8 | 1000 | 1.000*23 |
9 | 1001 | 1.001*23 |
11 | 1011 | 1.011*23 |
15 | 1111 | 1.111*23 |
综上,我们知道了给定的 64 位双精度数据在内存中的格式及其含义。
64 bits = 1 + 11 + 52
那么,它对应的真实数值就是:
符号位,值为 0 或 1 有效数是小数,故是在后面补 0 指数是无符号数,故是在前面补 0
或者
因为有效数的首位一定是 1,所以在存储的时候就被省略了,只保存后面的数字部分,这样就可以节省一位有效数字位了。正因如此,52 位的有效数字位能表示 53 位。
接下来,和大家一起感受下,十进制数值是如何以“双精度二进制浮点数”的格式存储在内存中的。
要想在计算机中存储十进制数字,需要:
1 . 将十进制转为二进制
2 . 将二进制写成科学记数法的形式
3 . 调整指数。根据前面“偏差指数”小节的介绍,真实存储的指数应该再加上 (211-1-1)(10) 即 1023(10)
4 . 标准化有效数,即省略最高位的 1
5 . 指数和有效数不足位的用 0 补齐,再依据符号(1位) + 指数(11位) + 有效数(52位)
的格式,将值依次填充在 64-bit 中即可
第一步,将十进制转为二进制。168(10) = 1010 1000(2),逻辑如下:
除 2 取余数,直到商为 0 为止
第二步,将二进制写成科学记数法的形式。1010 1000(2) = 1.0101 000(2) * 27 = 1.0101(2) * 27。此时:
第三步,调整指数。7 + (211-1-1) = 7 + 1023 = 1030。转成二进制就是 1030(10) = 100 0000 0110(2),逻辑如下:
除 2 取余数,直到商为 0 为止
第四步,标准化有效数。1.0101 省略首位的 1 之后就变成了 0101。
第五步,用 0 补齐指数(11位)和有效数(52位),最后再依次拼接即可。
0
100 0000 0110
0101 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
168 的 64 bits IEEE 754 格式
第一步,将十进制转为二进制。0.125(10) = 0.001(2),逻辑如下:
乘 2 取整数,直到小数部分为 0
第二步,将二进制写成科学记数法的形式。0.001(2) = 1(2) * 2-3。此时:
第三步,调整指数。-3 + (211-1-1) = -3 + 1023 = 1020。转成二进制就是 1020(10) = 11 1111 1100(2),逻辑如下:
除 2 取余数,直到商为 0 为止
第四步,标准化有效数。1 省略首位的 1 之后就变成了 0。
第五步,用 0 补齐指数(11 位)和有效数(52 位),最后再依次拼接即可。
0
011 1111 1100
0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
0.125 的 64 bits IEEE 754 格式
第一步,将十进制转为二进制。0.1(10) = 0.0 0011 0011 0011 ...(2),逻辑如下:
乘 2 取整数,直到小数部分为 0
此时,我们发现出现了循环(0011),用小数部分乘以 2 以后永远也不可能得到小数部分是 0 的情况。这个时候,就要进行四舍五入了。由于二进制只有 0 和 1,所以就 0 舍 1 入。这个就是计算机在存储小数时会出现误差的原因所在了,但因为保留的位数很多,精度较高,所以在大部分情况下误差可以忽略不计。
第二步,将二进制写成科学记数法的形式。0.0 0011 0011 0011 ...(2) = 1.1001 1001 1001 ...(2) * 2-4。此时:
第三步,调整指数。-4 + (211-1-1) = -4 + 1023 = 1019。转成二进制就是 1019(10) = 11 1111 1011(2),逻辑如下:
除 2 取余数,直到商为 0 为止
第四步,标准化有效数。1.1001 1001 1001 ... 省略首位的 1 之后就变成了 1001 1001 1001 ...。
第五步,用 0 补齐指数(11 位)和有效数(52 位),最后再依次拼接即可。
0
011 1111 1011
1001 1001 1001 1001 1001 1001 1001 1001 1001 1001 1001 1001 1001 1...
因为有循环,所以最后一位要四舍五入(0 舍 1 入),最终结果是 1001 1001 1001 1001 1001 1001 1001 1001 1001 1001 1001 1001 1010
0.1 的 64 bits IEEE 754 格式
本文重点介绍了双精度二进制浮点数(即 binary64,也称 double)的格式及三个字段的含义。
需要特别注意的是,当它在存储小数的时候,可能会有精度损失(比如上方 0.1 的例子)。
只要是符合 IEEE 754 标准的(如 Fortran 里的 real64
类型、Java / C# / C / C++ 里的 double
类型、JavaScript 里的 Number 类型等),在存储小数的时候都有可能出现误差。这个在对精度要求比较高的场景下,是不能忽略的。常规的替代方案就是先将小数转成整数(大数)进行存储和运算,最后显示的时候再恢复成小数形式。
京东创始人刘强东和其妻子章泽天最近成为了互联网舆论关注的焦点。有关他们“移民美国”和在美国购买豪宅的传言在互联网上广泛传播。然而,京东官方通过微博发言人发布的消息澄清了这些传言,称这些言论纯属虚假信息和蓄意捏造。
日前,据博主“@超能数码君老周”爆料,国内三大运营商中国移动、中国电信和中国联通预计将集体采购百万台规模的华为Mate60系列手机。
据报道,荷兰半导体设备公司ASML正看到美国对华遏制政策的负面影响。阿斯麦(ASML)CEO彼得·温宁克在一档电视节目中分享了他对中国大陆问题以及该公司面临的出口管制和保护主义的看法。彼得曾在多个场合表达了他对出口管制以及中荷经济关系的担忧。
今年早些时候,抖音悄然上线了一款名为“青桃”的 App,Slogan 为“看见你的热爱”,根据应用介绍可知,“青桃”是一个属于年轻人的兴趣知识视频平台,由抖音官方出品的中长视频关联版本,整体风格有些类似B站。
日前,威马汽车首席数据官梅松林转发了一份“世界各国地区拥车率排行榜”,同时,他发文表示:中国汽车普及率低于非洲国家尼日利亚,每百户家庭仅17户有车。意大利世界排名第一,每十户中九户有车。
近日,一项新的研究发现,维生素 C 和 E 等抗氧化剂会激活一种机制,刺激癌症肿瘤中新血管的生长,帮助它们生长和扩散。
据媒体援引消息人士报道,苹果公司正在测试使用3D打印技术来生产其智能手表的钢质底盘。消息传出后,3D系统一度大涨超10%,不过截至周三收盘,该股涨幅回落至2%以内。
9月2日,坐拥千万粉丝的网红主播“秀才”账号被封禁,在社交媒体平台上引发热议。平台相关负责人表示,“秀才”账号违反平台相关规定,已封禁。据知情人士透露,秀才近期被举报存在违法行为,这可能是他被封禁的部分原因。据悉,“秀才”年龄39岁,是安徽省亳州市蒙城县人,抖音网红,粉丝数量超1200万。他曾被称为“中老年...
9月3日消息,亚马逊的一些股东,包括持有该公司股票的一家养老基金,日前对亚马逊、其创始人贝索斯和其董事会提起诉讼,指控他们在为 Project Kuiper 卫星星座项目购买发射服务时“违反了信义义务”。
据消息,为推广自家应用,苹果现推出了一个名为“Apps by Apple”的网站,展示了苹果为旗下产品(如 iPhone、iPad、Apple Watch、Mac 和 Apple TV)开发的各种应用程序。
特斯拉本周在美国大幅下调Model S和X售价,引发了该公司一些最坚定支持者的不满。知名特斯拉多头、未来基金(Future Fund)管理合伙人加里·布莱克发帖称,降价是一种“短期麻醉剂”,会让潜在客户等待进一步降价。
据外媒9月2日报道,荷兰半导体设备制造商阿斯麦称,尽管荷兰政府颁布的半导体设备出口管制新规9月正式生效,但该公司已获得在2023年底以前向中国运送受限制芯片制造机器的许可。
近日,根据美国证券交易委员会的文件显示,苹果卫星服务提供商 Globalstar 近期向马斯克旗下的 SpaceX 支付 6400 万美元(约 4.65 亿元人民币)。用于在 2023-2025 年期间,发射卫星,进一步扩展苹果 iPhone 系列的 SOS 卫星服务。
据报道,马斯克旗下社交平台𝕏(推特)日前调整了隐私政策,允许 𝕏 使用用户发布的信息来训练其人工智能(AI)模型。新的隐私政策将于 9 月 29 日生效。新政策规定,𝕏可能会使用所收集到的平台信息和公开可用的信息,来帮助训练 𝕏 的机器学习或人工智能模型。
9月2日,荣耀CEO赵明在采访中谈及华为手机回归时表示,替老同事们高兴,觉得手机行业,由于华为的回归,让竞争充满了更多的可能性和更多的魅力,对行业来说也是件好事。
《自然》30日发表的一篇论文报道了一个名为Swift的人工智能(AI)系统,该系统驾驶无人机的能力可在真实世界中一对一冠军赛里战胜人类对手。
近日,非营利组织纽约真菌学会(NYMS)发出警告,表示亚马逊为代表的电商平台上,充斥着各种AI生成的蘑菇觅食科普书籍,其中存在诸多错误。
社交媒体平台𝕏(原推特)新隐私政策提到:“在您同意的情况下,我们可能出于安全、安保和身份识别目的收集和使用您的生物识别信息。”
2023年德国柏林消费电子展上,各大企业都带来了最新的理念和产品,而高端化、本土化的中国产品正在不断吸引欧洲等国际市场的目光。
罗永浩日前在直播中吐槽苹果即将推出的 iPhone 新品,具体内容为:“以我对我‘子公司’的了解,我认为 iPhone 15 跟 iPhone 14 不会有什么区别的,除了序(列)号变了,这个‘不要脸’的东西,这个‘臭厨子’。