代码之家  ›  专栏  ›  技术社区  ›  Nouphal.M

数学pow给出错误结果

  •  4
  • Nouphal.M  · 技术社区  · 6 年前

    我想重复一个角色 N 《时代》杂志 Math.pow 作用

    但当我在控制台中使用它时,结果对我来说没有任何意义:

    Math.pow(10,15) - 1 999999999999999

    但为什么 Math.pow(10,16) - 1 提供 10000000000000000 ?

    2 回复  |  直到 4 年前
        1
  •  6
  •   trincot    4 年前

    您产生的结果超过 Number.MAX_SAFE_INTEGER 值,因此它们不再精确到单位。

    这与JavaScript对数字使用64位浮点表示有关,因此在实践中,您只有大约16位(十进制)精度。

    自引入 BigInt 在EcmaScript中,可以使用该数据类型获得准确的结果,尽管它不能与 Math.pow . 相反,您可以使用 ** 操作人员

    了解如何使用number和bigint(与 n 后缀)不同:

    10  ** 16  - 1  // == 10000000000000000
    10n ** 16n - 1n // ==  9999999999999999n
    
        2
  •  0
  •   Pankaj Bisht ccordon    5 年前

    与许多其他编程语言不同,JavaScript不定义不同类型的数字,如整数、短、长、浮点等。

    JavaScript数字始终按照国际IEEE 754标准存储为双精度浮点数字。

    此格式以64位存储数字,其中数字(分数)以0到51位存储,指数以52到62位存储,符号以63位存储:

    整数(不带句点或指数符号的数字)最多可精确到15位。