• 你不知道的 JavaScript 系列中( 8 ) -浮点数


    二进制浮点数最大的问题是会出现如下的情况:
    0.1+0.3 === 0.3; // false

    从数学角度来说,上面的条件判断应该为 true,可结果为什么是 false 呢?

    简单来说,二进制浮点数中的 0.1 和 0.2 并不是十分精确,它们想加的结果并非刚好等于 0.3,而是一个比较接近的数字,0.30000000000000004,所以条件判断为 false。
    那么应该怎么来判断 0.1+0.2 和 0.3 是否相等呢?最常见的方法是设置一个误差范围值,通常成为 “机器精度”,对 JS 来说,这个值通常是 2^-52。

    从 ES6 开始,该值定义在 Number.EPSILON 中,可以直接用,也可以在 ES6 之前对版本写 polyfill

    if(!Number.EPSILON) {
      Number.EPSILON = Math.pow(2,-52);
    }
    
    function numbersCloseEnoughToEqual(n1, n2) {
      return Math.abs(n1 - n2) < Number.EPSILON
    }
    
    var a = 0.1 + 0.2;
    var b = 0.3
    
    numbersCloseEnoughToEqual(a, b); // true
    numbersCloseEnoughToEqual(0.0000001, 0.0000002); // false

    能够呈现的最大浮点数大约是 1.798e+308,定义在 Number.MAX_VALUE 中。最小浮点数定义在 Number.MIN_VALUE 中,大约是 5e-324,它不是负数,但无限接近于0

  • 相关阅读:
    HAOI2018 奇怪的背包
    HAOI2018 苹果树
    骑士游戏
    飞飞侠
    奶牛排队
    寻找道路
    [USACO08JAN]牛大赛Cow Contest
    灾后重建
    [USACO09DEC]牛收费路径Cow Toll Paths
    萌萌哒
  • 原文地址:https://www.cnblogs.com/wzndkj/p/12866780.html
Copyright © 2020-2023  润新知