计算机语言有哪几类,属于计算机程序设计语言的是,计算机语言有哪几类,属于计算机程序设计语言的是哪些
最近在学习JS的过程中发现了计算机JS,发现了一件很有意思的事情。0.1 0.2的结果不是0.3,而是0.30000000004,而是将小数相乘,相加,相除,得到想要的0.3。
我在python上试过,python也是,结果是0.30000000004。
然后开始收集资料,终于找到了答案。要了解原因,就要知道二进制,指数格式,IEEE 754标准等等。
1.二进制
计算机中的所有数据都以二进制格式存储,包括整数、浮点数和所有其他类型的数据。我们把十进制的0.1和0.2转换成二进制。
转换方法也比较简单,就是把整数转换成二进制数。也就是把整数除以2,从下往上取余数。以下图100为例。
然后把小数转换成二进制,也就是把小数部分无限乘以2,按顺序取整数。以0.375为例。
2.指数形式
指数意味着在有限的空间内可以存储更大的值。
的所有小数都可以用指数表示,D=M*10E,比如100可以表示为1*102。
二进制数也可以用指数来表示。B=M*2E的形式,其中e是指数,M是B的位数,例如0.011可以表示为1.1*10-10,其中“-10”表示-2。
3.浮点数的IEEE754标准
JavaScript数只有一个,包括整数和小数,符合IEEE 754标准,用64位固定长度表示。也就是说,它是一个标准的双精度浮点数。
这里,第一个符号位“1”表示负数,“0”表示正数。
首先,将十进制的0.1转换成二进制的0.5000000000005
然后,将十进制0.2转换为二进制。0.0011001100110011 .
二。将二进制0.1和0.2转换成指数形式
小数:0.1
二进制格式:0.0001100110011001100110011。
指数形式:1.10011001100110011。*2-100//指数为-4
小数:0.2
二进制格式:0.001100110001 110001 100015
指数形式:1.1001100110011001100110011。* 2-11//指数是-3
第三,将指数形式转换成IEEE754标准
这里IEEE754标准规定尾数只能保留52位,所以四舍五入后无限循环小数只能保留52位。(第53位之后,所有位都被丢弃,第53位为“0-丢弃”,如果第52位为1,则必须提前1位)。
将十进制0.2转换为IEEE 754标准:
四。使用IEEE 754格式0.1 0.2
这太长了。简单来说就是10.40000.000000000005另一方面,此时得到的数值指标仍然是指数形式,要转换成二进制形式,前三位小数必须是0.010010001000001.1000100005
然后将数字转换成十进制数后,得到0.300000000004,即0 *2-1*2- 20 *2- 30 *2-4.1*2- 52。
总的来说:
因为计算机上存储数据的空间有限,所以只能存储定长数据。另一方面,由于无限循环等数据只能四舍五入,所以有些数据本身可能会有一些误差,所以即使添加也是有误差的。
最后,我们来看看为什么(0.1*10 0.2*10 )/10等于3。0.1和0.2先相乘,所以是整数。那么,我们来看看整数之间的加法。
最后用3/10得出0.3。这个我还没想好怎么算,就用电脑吧。
blogs.com/hai-long/p/12552148.html, www.cn街3359号