-
不用COPYMEMORY函数,如何将双精度浮点数存储到数组中
2012-10-12 08:47:57不用COPYMEMORY函数 1、如何将双精度浮点数存储到数组中 2、转存后的数组,如何再得到这个浮点数。 -
java中单精度浮点数和双精度浮点数_C语言菜鸟基础教程之单精度浮点数与双精度浮点数...
2021-03-10 04:06:43计算机程序中的浮点数分为单精度浮点数和双精度浮点数。单精度和双精度精确的范围不一样。计算机里的最基本的存储单位用位(bit)来表示。bit只能用来存储0或1。稍大一点的单位是字节(Byte,简写为B)。再大一级的是千...上节课 简单介绍了浮点数。计算机程序中的浮点数分为单精度浮点数和双精度浮点数。
单精度和双精度精确的范围不一样。
计算机里的最基本的存储单位用位(bit)来表示。bit只能用来存储0或1。
稍大一点的单位是字节(Byte,简写为B)。
再大一级的是千字节(kilo Bytes),用k来表示。
再大一级的单位是兆字节(Mega Bytes),用M来表示。一张照片的大小通常为1~3M。
再大一级的单位为G。一部高清电影的大小通常为1~2G。
再大一级的单位为T。
换算关系为:
1B = 8bit
1k = 1024B = 2^10 B
1M = 1024k = 2^20 B
1G = 1024M = 2^30 B
1T = 1024G = 2^40 B
单精度(float)在计算机中存储占用4字节,32位,有效位数为7位(6位小数+小数点)。
双精度(double)在计算机中存储占用8字节,64位,有效位数为16位(15位小数+小数点)。
不管是float还是double,在计算机中的存储都遵循IEEE规范,使用二进制科学计数法,都包含三个部分:符号位、指数位和尾数部分。其中float的符号位、指数位(即整数部分)、尾数部分分别为1, 8, 23。双精度则分别为1, 11, 52。
float
double
精度主要取决于尾数部分的位数,float为23位,最小为2的-23次方,约等于1.19乘以10的-7次方,所以float小数部分只能精确到后面6位,加上小数点算做一位,即有效数字为7位。
类似,double 尾数部分52位,最小为2的-52次方,约为2.22乘以10的-16次方,所以精确到小数点后15位,有效位数为16位。
程序验证:
#include
int main()
{
float a = 1.123456789;
printf("a = %20.9f\n", a);
double b = 2.123456789;
printf("b = %20.9f\n", b);
return 0;
}
注意:这里%20.9f表示浮点数总共有20位,其中小数占9位。不足20位的部分,左侧用空格来填充。
运行结果:
a = 1.123456836
b = 2.123456789
从运行结果可以看出,单精度浮点数小数部分只有前6位是准确的,后三位是不准确的。双精度小数部分9位都是准确的。
-
ieee754双精度浮点数转换_双精度浮点数
2020-12-01 16:49:01首先要把二进制表贴出来,以便下面转换的时候查看:111111111111098765432102^102^92^82^72^62^52^42^32^22^12^010245122561286432168421我们说一下「double float」双精度浮点数,基于 IEEE 754:双精度...一个十进制的数字,转换成二进制格式,动手计算下数字是怎样以二进制方式存储的。首先要把二进制表贴出来,以便下面转换的时候查看:
1
1
1
1
1
1
1
1
1
1
1
10
9
8
7
6
5
4
3
2
1
0
2^10
2^9
2^8
2^7
2^6
2^5
2^4
2^3
2^2
2^1
2^0
1024
512
256
128
64
32
16
8
4
2
1
我们说一下「double float」双精度浮点数,基于 IEEE 754:
双精度浮点数为 64 位,单精度为 32 位,双精度比单精度,肯定表示的更加精准嘛,就是数字的位数能表示的更多。双精度浮点数存储的格式由三部分构成:- 符号位(Sign):1位
- 指数位(Exponent):11位
- 精度位(Fraction):52位
数字:300
我们拿数字 300 举例:300/2 = 150 余 0;150/2 = 75 余 0;
75/2 = 37 余 1;
37/2 = 18 余 1;
18/2 = 9 余 0;
9/2 = 4 余 1;
4/2 = 2 余 0;
2/2 = 1 余 0;
1/2 = 0 余 1;余数反推回去 100101100 补全以后就是 00100101100,这样的操作可以在「纸」上操作。如果在电脑上,可以使用 (300).toString(2)。最终数字 300 转换成二进制为 100101100,计算精度位的时候,第一个 1 去掉,对应的就是精度的存储值就是 00101100;计算指数位的时候需要先写成 1.00101100E8 ,小数点向前移动了 8 位,指数为 8 ;看最上面的对应表,指数为 8 的话,对应的为 00000001000,这个二进制数据需要加上「基准值」,最后结果为 1023 + 8 = 1031;而 1031 对应的二进制码为 10000000111,所以哈,指数位存的码点值为 10000000111。数字 300 存储的码点
数字:10.24
另一个数字 10.24 举例:10/2 = 5 余 0;
5/2 = 2 余 1;
2/2 = 1 余 0;
1/2 = 0 余 1;
余数反推 1010,补全以后就是 00000001010;小数部分计算:.24 * 2 = .48 取 0;
.48 * 2 = .96 取 0;
.96 * 2 = 1.92 取 1;
.92 * 2 = 1.84 取 1;
.84 * 2 = 1.68 取 1;
.68 * 2 = 1.36 取 1;
.36 * 2 = .72 取 0;
.72 * 2 = 1.44 取 1;
.44 * 2 = .88 取 0;
......小数部分在尾数的表示为 001111010....那这个 10.24 在二进制表示应该是 1010.001111010.... 这样的数值。精度位:010001111010(把上面的 1 去掉)指数位:先转成 1.010E3,然后指数为 3 就是 00000000011 + 01111111111 = 100000000010,也可以计算为 3 + 1023 = 1026数字 10.24 存储的码点
在线转换页面:
http://www.binaryconvert.com/result_double.html?decimal=053
参考文档:https://blog.csdn.net/abcdu1/article/details/75095781
https://blog.csdn.net/zhengyanan815/article/details/78550073
https://www.boatsky.com/blog/26
图片授权基于 www.pixabay.com 相关协议推荐阅读
如何用 vue-cli 调试源码?如何调试 Vue 源码?Vue 在挂载数据前都经历了什么?
-
单精度浮点数与双精度浮点数区别
2020-04-06 15:14:35而双精度浮点数使用 8个字节(64位)存储空间来存储一个浮点数,包括符号位1位,阶码11位,尾数52位。 2、所存的数值范围不同 单精度浮点数的数值范围为-3.4E38~3.4E38,而双精度浮点数可以表示的数字的绝对值范围...单精度浮点数与双精度浮点数区别
1、所占的内存不同
单精度浮点数占用4个字节(32位)存储空间来存储一个浮点数,包括符号位1位,阶码8位,尾数23位。
而双精度浮点数使用 8个字节(64位)存储空间来存储一个浮点数,包括符号位1位,阶码11位,尾数52位。
2、所存的数值范围不同
单精度浮点数的数值范围为-3.4E38~3.4E38,而双精度浮点数可以表示的数字的绝对值范围大约是:-2.23E308 ~ 1.79E308。E表示10的多少次方,如3.4E38指的是3.4乘以10的38次方。
3、十进制下的位数不同
单精度浮点数最多有7位十进制有效数字,如果某个数的有效数字位数超过7位,当把它定义为单精度变量时,超出的部分会自动四舍五入。
双精度浮点数可以表示十进制的15或16位有效数字,超出的部分也会自动四舍五入。
整型:
byte:-2^7 ~ 2^7-1,即-128 ~ 127。1字节。Byte。末尾加B
short:-2^15 ~ 2^15-1,即-32768 ~ 32767。2字节。Short。末尾加S
有符号int:-2^31 ~ 2^31-1,即-2147483648 ~ 2147483647。4字节。Integer。
无符号int:0~2^32-1。
long:-2^63 ~ 2^63-1,即-9223372036854774808 ~ 9223372036854774807。8字节。Long。末尾加L。(也可以不加L)
-
C语言菜鸟基础教程之单精度浮点数与双精度浮点数
2021-01-20 06:04:02计算机程序中的浮点数分为单精度浮点数和双精度浮点数。 单精度和双精度精确的范围不一样。 计算机里的最基本的存储单位用位(bit)来表示。bit只能用来存储0或1。 稍大一点的单位是字节(Byte,简写为B)。 再大一级的... -
python双精度浮点数_JS-Number—了解IEEE双精度浮点数
2021-03-18 08:26:51一、复习10进制转2进制1)整数部分:除2取余,逆序2)小数部分:乘2取整,正序在线工具二、了解IEEE 754双精度浮点数规范1) 通过2进制的科学计数法存储。和10进制的科学计数法类似,二进制的科学技术法格式为1.xxx*2^N...一、复习10进制转2进制
1)整数部分:除2取余,逆序
2)小数部分:乘2取整,正序
在线工具
二、了解IEEE 754双精度浮点数规范
1) 通过2进制的科学计数法存储。
和10进制的科学计数法类似,二进制的科学技术法格式为1.xxx*2^N。其中需要留意下二进制科学计数法的整数部分都是1,所以在存储时省略整数部分1。
2) 格式:符号位+指数位+尾数位
符号位S:第 1 位是正负数符号位(sign),0代表正数,1代表负数
指数位E:中间的 11 位存储指数(exponent),用来表示次方数
科学计数法中指数E是可以为负数的,在表示负的指数时IEEE754标准引入了一个偏移量1023,在存储指数时加上该偏移量把负数E转成正数。这就导致11位的指数能够表示指数的范围是[-1023, 1024]。
尾数位M:最后的 52 位是尾数(mantissa),超出的部分自动进一舍零,没有填满的部分自动补0
如10进制数400.12,用10进制科学计数法表示为:4.0012*10^2,。其中"0012"就是尾数部分。
最终可表示为(图片来源):
其中S,E,M都是实际存储科学计数法的值。
如10进制4.5转成2进制为:
// Step1 转成二进制
100.1
// Step2 转成二进制科学计数
1.001*2^2
S = 0
E = 2 + 1023 = 2015
M = 001 // 整数1被省略了
形象的查看存储情况,可参考这里
3) 有限集合
IEEE754能表示的实数数量是有限的,假设MAX_VALUE,MIN_VALUE分别表示其表示的最大正数和最小正数,那有限集合可表示为:
[-MAX_VALUE, -MIN_VALUE] U [MIN_VALUE, -MAX_VALUE]
几个有趣的问题
1) 0.1 + 0.2 !== 0.3
0.1,0.2和0.3在转成二进制时都是无限循环的,在存储时会失去精度,0.1+0.2在运算时也会失去精度,导致结果不等于0.3。
2) 给一个数字加上一个非0的增量还等于本身这个数字
1 + Number.MIN_VALUE/2 === 1
这个增量如果小于JS能表示的最小浮点数就会视为0,加上这样的数等于加上0。
3) JS最大整数为啥是2^53-1而不是2^52-1
尾数占用52个bit,再加速省略的那个bit(见2.1)正好53个bit。
4)JS可以精确的表示哪些小数呢
小数部分是这种格式的都可以精确表示。
1/Math.pow(2, N), 其中N是(0, 1024)区间的整数。
如分数1/2,1/4, 1/8。
参考
-
单精度浮点数和双精度浮点数
2011-03-10 11:06:00根据IEEE754国际标准,常用的浮点数有两种格式 (1) 单精度浮点数(Single)(2)双精度浮点数(double)单精度浮点数 用来表示带有小数部分的实数,一般用于科学计算。 占用4个字节(32位)存储空间,包括符号位1位,阶码... -
单精度浮点数与双精度浮点数
2012-03-28 07:04:56(1) 单精度浮点数(Single) 用来表示带有小数部分的实数,一般用于科学计算。 占用4个字节(32位)存储空间,包括符号位1位,阶码8位,尾数23位。其数值范围为3.4E-38~3.4E+38,单精度浮点数最多有7位十进制... -
ieee754双精度浮点数转换_浅析浮点数精度问题
2020-12-01 16:48:24一、前言相比于整数,浮点数的...常用的浮点数有单精度浮点数(float)和双精度浮点数(double),本文主要以单精度浮点数为例,双精度浮点数原理相同。二、浮点数的表示方法通常使用IEEE754标准存储和表示浮点数。IEEE7... -
双精度浮点数double
2019-03-09 12:28:24比起单精度浮点数,双精度浮点数(double)使用 64 位(8字节) 来存储一个浮点数。 它可以表示十进位制的15或16位有效数字。 sign bit(符号): 用来表示正负号 exponent(指数): 用来表示次方数 mantissa(尾数): 用来... -
小朋友学C语言(4):单精度浮点数与双精度浮点数
2018-09-07 13:06:00计算机程序中的浮点数分为单精度浮点数和双精度浮点数。 单精度和双精度精确的范围不一样。 计算机里的最基本的存储单位用位(bit)来表示。bit只能用来存储0或1。 稍大一点的单位是字节(Byte,简写为B)。 再大一... -
整数、单精度浮点数和双精度浮点数在计算机中的存储格式
2015-10-19 18:48:51大端存储和小端存储的区别 -
单精度和双精度浮点数数据类型
2016-12-06 01:20:15单精度和双精度浮点数数据类型 C、C++中使用到的单精度浮点数(float)类型和双精度浮点数(double)类型是在IEEE二进制浮点数算术标准(ANSI/IEEE Std 754-1985)中定义的。下面分别从存储格式、内存... -
float:浮点型double:双精度实型decimal:数字型单精度浮点数(Single)双精度浮点数(double)...
2018-10-22 13:06:00双精度浮点数(double) Decimal为SQL Server、MySql等数据库的一种数据类型,不属于浮点数类型,可以在定义时划定整数部分以及小数部分的位数。使用精确小数类型不仅能够保证数据计算更为精确,还可以节省... -
ieee754双精度浮点数转换_浮点数格式与存储
2020-11-29 19:30:56比如,给定一个单 精度浮点数的二进制存储为: 0 10000001 1101 0000000000000000000; 那么对应的符号为:0,表示正数;阶码 E 为:129-127=2;尾数为 1.1101。所以对应的二 进制科学计数法为:1.1101*2^2,也就是 ... -
单精度浮点数(float)与双精度浮点数(double)的区别:
2018-07-27 16:46:00而双精度double是用 8 个字节来存储的,这是他们最本质的区别。 2、由于存储位不同,8位,16位他们能表示的数值的范围就不同,也就是能准确表示的数的位数就不同。 单精度浮点的表示范围:-3.40E+38 ~ +3.40E+38 ... -
基础学习笔记(一)双精度浮点数运算
2018-06-23 14:48:37JS中使用IEEE-754规定的双精度浮点数,所有的算法也都符合IEEE-754规定的双精度浮点数运算。 双精度浮点数是一种64位(64 bit)的二进制数字格式。包括3个组成部分: 符号位 1位 阶码(指数部分) 11位 尾数(有效数... -
js实现十六进制转换单&双精度浮点数
2020-09-02 13:58:418字节16进制转双精度浮点数 前言 一、JS处理32位整型位运算? 示例:在JS中无论是整数还是小数都是按照64位的浮点数形式存储,而整数运算会自动转化为32位有符号整数。 有符号整数使用 31 位表示整数的数值,用第... -
c++ 双精度浮点数转2进制_浮点数的底层原理和精度损失问题
2020-12-27 22:51:23写在前面碰巧最近定义接口的时候碰到了浮点数精度的问题,稍微整理了浮点数的一些知识点:浮点数的底层表示浮点数的精度损失问题浮点数的表示范围和精度小数的二进制表示浮点数的表示借鉴了科学计数法,比如在十进制... -
双精度浮点数转换器在线_关于浮点数的几个有意思的例子
2020-11-19 23:24:16本文都是下面文章开头6个问题的解答:张雅宸:浮点数的二进制表示以及几个例子zhuanlan.zhihu.com问题1int 当两个数字都是float类型时,相乘的结果却是58...0.58 * 1000.58的双精度表示是:0 01111111110 0010100... -
JS-Number—了解IEEE双精度浮点数
2018-02-06 00:58:40二、了解IEEE 754双精度浮点数规范 1) 通过2进制的科学计数法存储。 和10进制的科学计数法类似,二进制的科学技术法格式为1.xxx*2^N。其中需要留意下二进制科学计数法的整数部分都是1,所以在存储时省略整数部分1。... -
ieee754双精度浮点数转换_浮点数的二进制表示(IEEE 754标准)
2020-12-01 16:47:54现代计算机中,一般都以IEEE 754标准存储浮点数,这个标准的在内存中存储的形式为:对于不同长度的浮点数,阶码与小数位分配的数量不一样,如下:对于32位的单精度浮点数,数符分配是1位,阶码分配了8位,尾数分配了... -
python - 用struct以及HxD查看浮点数在内存中的存储,默认是双精度浮点数
2020-06-30 19:55:16于是双精度d的存储方式就是 最大数:0 11111111110 11111111111111111111111111111111111111111111111111111111111111111111 In [27]: struct.unpack("!d",b'\x7f\xef\xff\xff\xff\xff\xff\xff') Out[27]: (1....