javascript-悟道-02-数值

糟粕

  1. NaN 不等于自身
  2. Math 对象有一些本该在Number 上的函数, 从Java学的糟粕
// 2147483647

浮点数的思想

  1. 分两部分: 有效位数(也叫系数-coefficient/分数fraction/尾数mantissa); 指数(exponent)指小数点应该放在哪个位置
  2. 64位(1一个number类型包含一个符号位(sign),11位指数位和53位有效数位)
  3. IEEE754 0.5 <= 有效位数 < 1.0 符号数(正/负) * 有效位数 * (2 ** 指数 )

2.1 零

Object.is(0, -0) // false  永远不要使用Object.is???

2.2 字面量

js 内置 18 437 736 874 454 810 627 (20位)个不可变的number 对象??

NaN === NaN // false
Object.is(NaN, NaN) // true
NaN 是 not a number的缩写但  typeof NaN // number

2.3 Number

Number.isNaN() // 
Number.MAX_SAFE_INTEGER //  9007199254740991  16位, js 安全的计算范围, 超过16位还是用字符串吧...9000万亿.
Number.isSafeInteger(9007199254740991) // true 是否是安全整数
Number.MIN_VALUE
Number.MAX_VALUE

2.4 运算符

+ - * / % ** 
+ - 可以做前置运算符,+可以转数字,但是还是直接用Number(x) // 这样比较直观
+  还可以拼接字符串,`${ a }${ b }`

2.5 位运算符

  1. 和C语言类似, js会先转换成32位有符号整型并开始计算, 得到结果再转回数值类型
  2. 最高22位的有效数字会直接丢失
&
|
^
<< 
>>>
>>  带符号扩展右位移

2.6 Math对象

该对象有一些本应该是运算符的函数?

Math.floor()
Math.trunc() // 返回的是更接近0的整数
Math.min(1,2,3,0, -2) // -2

2.7 deconstruct函数分析数值类型的本质

function deconstruct(number) {
    let sign = 1;
    let coefficient = number;
    let exponent = 0;
    if (coefficient < 0) {
        coefficient = -coefficient;
        sign = -1
    }
    if (Number.isFinite(number) && number !== 0) {
        exponent = -1128 // -1128是Number.MIN_VALUE的指数减去有效位数再减去奖励位
        let reduction = coefficient
        while (reduction !== 0) {
            exponent++
            reduction /= 2
        }
        reduction = exponent
        while (reduction > 0) {
            coefficient /= 2
            reduction--
        }
        while (reduction < 0) {
            coefficient *= 2
            reduction++
        }
    }
    return {
        sign,
        coefficient, // 系数
        exponent, // 指数
        number
    }
}
console.log(deconstruct(Number.MAX_SAFE_INTEGER))
console.log(deconstruct(1))
console.log(deconstruct(0.1)) 
0.3   
0.1 + 0.2  //  0.30000000000000004
100/3 // 33.333333333333336

在这里插入图片描述
两个大小差不多的数相加通常比两个大小悬殊的数相加产生较小的误差, 这就是为什么部分求和比单独求和更精确.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值