学习与我的浮点数的Javascript的精度

学习与我的浮点数的Javascript的精度
大多数的编程语言有几个数字数据类型,但只有一个Javascript,您可以使用typeof运算符看到数字类型。无论是整数或浮点数,简单地将其分为数的Javascript。

Typeof 17; / /数量
类型98.6; / /数量
类型21.3; / /数量
事实上,在Javascript中所有的数都是双精度浮点数字。这是64位编码的IEEE754标准就是了,双打。如果这使你不知道Javascript代表一个整数,记住一个双精度浮点数字可以代表一个53位的整数,整数从9007199254740992(253)9007199254740992(253)是有效的双精度浮点数字。因此,虽然是在Javascript中没有明显的整数类型,整数运算可以进行完全。

大多数算术运算符可以用整数、实数或二者的组合计算。

0.1 * 0.9 0.19;
- 99 + 100; / 1
21 - 12.3; / 8.7
2.5 5;0.5
21% 8; / 5
然而,位运算算子更special.javascript操作不直接为一个浮点数,但将其隐含的32位整数。(实际上,它们转换为32大端(big endian)2的补码整数表示。)带一点或表达为例:
8 | 1; / / 9
一个看似简单的表达实际上需要几个步骤来完成操作。如前所述,数字8和1中的Javascript都是双精度的浮点数。但他们也可以表示为32位整数,即32位的0和1的序列,整数8表示为32位二进制序列如下:

0000000000000000000000000000 1000

你也可以使用数字类型的ToString方法自己看:

(8),ToString(2) / 1000

toString方法的参数指定的基数的转换,这是由2个基数为代表(或二进制)。结果值省略额外的0(位)在离开,因为他们不影响最终的价值。

整数1表示为32位二进制文件,如下所示:

0000000000000000000000000000000 1

两位序列由位或操作表达式合并,只要操作中所涉及的两位中的任何一位为1,结果的位为1:

0000000000000000000000000000 1001

这个序列代表一个整数9,你可以使用标准库函数parseInt验证,以及2作为基数:
ParseInt(1000
(此外,前导0位是不必要的,因为它们不影响操作的结果。)

所有点运营商以同样的方式工作。他们把操作数转换成整数,然后用整数数字模式来进行操作,最后将结果为浮点标准的Javascript的数量。一般来说,Javascript引擎需要做一些额外的工作来做这些转变。自号存储在一个浮点数,它必须被转换成一个整数,然后转换为浮点数。然而,在某些情况下,算术表达式和甚至变量只能参加运算的整数。编译器有时可以推断这些情况,并以整数方式内部存储数字,以避免不必要的转换。

关于浮点数的最后警告,你应该遵守times.floating-point数字似乎熟悉的警惕,但他们是不准确的。甚至一些算术操作似乎是最简单的产生不正确的结果。

0.1 + 0.2;0.300000000000004

虽然64位的精度是相当高的,双精度浮点数只能代表一组有限的数字,但并不是所有的实数。浮点操作只能产生一个近似的结果,和四的RMS五到最近的房号。当你执行一系列操作,结果将成为舍入误差的积累越来越不准确。圆也可以从算术运算规律我们通常期望做出一些意想不到的偏差。例如,实数满足结合律,这意味着对于任何实数x,y,z,总是满足(x + y)= X + Y + Z(+ Z)。

然而,对于浮点数,情况并非总是如此。
(0.1 + 0.2)+ 0.3; / 0.6000000000000000
0.1 +(0.2 + 0.3); / 0.6

浮点数重量的精度和性能。当我们关心的是精度,我们应该对浮点数的限制,小心。一个有效的解决方案是使用整数值的操作尽可能多的,因为整数不需要杀进时表示。当计算货币相关,程序员通常值转换为最小的货币单位来表示计算一次,这样就可以计算出整数。例如,如果上面的计算是以美元计算,那么我们可以把它转换成一个整数表示的美分。
(10 + 20)+ 30; / 60
10 +(20 + 30); / 60
对于整数运算,您不必担心舍入错误,但仍然要小心,所有的计算只适用于整数253 - 253。

提示

Javascript的数量是一个双精度浮点数。
Javascript中的整数只是双精度浮点数的一个子集,而不是单个数据类型。
位运算符将数字视为一个32位带符号整数。
以上是Javascript引入的浮点数。在浮点运算中,我们必须时刻注意精度陷阱。我希望这篇文章能帮助你学习
免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部