Skip to content

Files

Latest commit

Jun 28, 2019
45fea7c · Jun 28, 2019

History

History
395 lines (265 loc) · 8.9 KB

20.md

File metadata and controls

395 lines (265 loc) · 8.9 KB

16. Math

原文: http://exploringjs.com/impatient-js/ch_math.html

贡献者:飞龙

Math是具有数据属性和处理数字的方法的对象。

你可以把它看作一个伪模块。今天,它可能会被创建为一个模块,但它早在模块之前就存在了。

16.1。数据属性

  • Math.E: number [ES1]

    欧拉数,自然对数的基数,约为 2.7182818284590452354。

  • Math.LN10: number [ES1]

    10 的自然对数,约为 2.302585092994046。

  • Math.LN2: number [ES1]

    2 的自然对数为,约为 0.6931471805599453。

  • Math.LOG10E: number [ES1]

    e的基数为 10 的对数,约为 0.4342944819032518。

  • Math.LOG2E: number [ES1]

    e的基数为 2 的对数,约为 1.4426950408889634。

  • Math.PI: number [ES1]

    数学常数 π,圆周长与直径的比值,约为 3.1415926535897932。

  • Math.SQRT1_2: number [ES1]

    1/2 的平方根,约为 0.7071067811865476。

  • Math.SQRT2: number [ES1]

    2 的平方根,约为 1.4142135623730951。

16.2。指数,根,对数

  • Math.cbrt(x: number): number [ES6]

    返回x的立方根。

    > Math.cbrt(8)
    2
  • Math.exp(x: number): number [ES1]

    返回e ** xe为欧拉数)。Math.log()的逆。

    > Math.exp(0)
    1
    > Math.exp(1) === Math.E
    true
  • Math.expm1(x: number): number [ES6]

    返回Math.exp(x)-1Math.log1p()的逆。非常小的数字(接近 0 的小数)以更高的精度表示。只要.exp()的结果接近 1,此函数就会返回更精确的值。

  • Math.log(x: number): number [ES1]

    返回x的自然对数(基数为e,欧拉常数)。 Math.exp()的逆。

    > Math.log(1)
    0
    > Math.log(Math.E)
    1
    > Math.log(Math.E ** 2)
    2
  • Math.log1p(x: number): number [ES6]

    返回Math.log(1 + x)Math.expm1()的逆。非常小的数字(接近 0 的徐爱三个月)以更高的精度表示。只要.log()的参数接近 1,你就可以向此函数提供更精确的数字。

  • Math.log10(x: number): number [ES6]

    返回x的基数为 10 的对数。10 ** x的逆。

    > Math.log10(1)
    0
    > Math.log10(10)
    1
    > Math.log10(100)
    2
  • Math.log2(x: number): number [ES6]

    返回x的基数为 2 的对数。2 ** x的逆。

    > Math.log2(1)
    0
    > Math.log2(2)
    1
    > Math.log2(4)
    2
  • Math.pow(x: number, y: number): number [ES1]

    计算xy次幂。与x ** y相同。

    > Math.pow(2, 3)
    8
    > Math.pow(25, 0.5)
    5
  • Math.sqrt(x: number): number [ES1]

    返回x的平方根。 x ** 2的逆。

    > Math.sqrt(9)
    3

16.3。舍入

舍入意味着将任意数字转换为整数(不带小数的数字)。表 15 列出了可用的函数,以及它们为少数代表性输入返回的内容。

表 15:Math的舍入函数

-2.9 -2.5 -2.1 2.1 2.5 2.9
Math.floor -3 -3 -3 2 2 2
Math.ceil -2 -2 -2 3 3 3
Math.round -3 -2 -2 2 3 3
Math.trunc -2 -2 -2 2 2 2
  • Math.ceil(x: number): number [ES1]

    返回x ≤ i的最小(最接近-∞)整数i

    > Math.ceil(1.9)
    2
    > Math.ceil(2.1)
    3
  • Math.floor(x: number): number [ES1]

    返回i ≤ x的最大(最接近+∞)整数i

    > Math.floor(1.9)
    1
    > Math.floor(2.1)
    2
  • Math.round(x: number): number [ES1]

    返回最接近x的整数(接近正无穷大的整数)。如果x的小数部分为.5,则.round()向上舍入:

    > Math.round(2.5)
    3
    > Math.round(-2.5)
    -2
  • Math.trunc(x: number): number [ES6]

    删除x的小数部分并返回整数结果。

    > Math.trunc(1.9)
    1
    > Math.trunc(2.1)
    2

16.4。三角函数

所有角度均以弧度表示。使用以下两个函数在度和弧度之间进行转换。

function toRadians(degrees) {
  return degrees / 180 * Math.PI;
}
function toDegrees(radians) {
  return radians / Math.PI * 180;
}
  • Math.acos(x: number): number [ES1]

    返回x的反余弦。

    > Math.acos(0)
    1.5707963267948966
    > Math.acos(1)
    0
  • Math.acosh(x: number): number [ES6]

    返回x的反双曲余弦值。

  • Math.asin(x: number): number [ES1]

    返回x的反正弦。

    > Math.asin(0)
    0
    > Math.asin(1)
    1.5707963267948966
  • Math.asinh(x: number): number [ES6]

    返回x的反双曲正弦值。

  • Math.atan(x: number): number [ES1]

    返回x的反正切。

  • Math.atanh(x: number): number [ES6]

    返回x的反双曲正切值。

  • Math.atan2(y: number, x: number): number [ES1]

    返回商 y / x 的反正切。

  • Math.cos(x: number): number [ES1]

    返回x的余弦值。

    > Math.cos(0)
    1
    > Math.cos(Math.PI)
    -1
  • Math.cosh(x: number): number [ES6]

    返回x的双曲余弦值。

  • Math.hypot(...values: number[]): number [ES6]

    返回values(毕达哥拉斯定理)的平方和的平方根:

    > Math.hypot(3, 4)
    5
  • Math.sin(x: number): number [ES1]

    返回x的正弦值。

    > Math.sin(0)
    0
    > Math.sin(Math.PI / 2)
    1
  • Math.sinh(x: number): number [ES6]

    返回x的双曲正弦值。

  • Math.tan(x: number): number [ES1]

    返回x的正切值。

    > Math.tan(0)
    0
    > Math.tan(1)
    1.5574077246549023
  • Math.tanh(x: number): number; [ES6]

    返回x的双曲正切值。

16.5。 asm.js 助手

WebAssembly 是一个基于 JavaScript 的虚拟机,大多数 JavaScript 引擎都支持它。

asm.js 是 WebAssembly 的前身。如果编译静态语言(例如 C++),它是 JavaScript 的一个子集,可以生成快速可执行文件。在某种程度上,它也是一个虚拟机,在 JavaScript 的范围内。

以下两种方法有助于 asm.js,并且几乎没有用例。

  • Math.fround(x: number): number [ES6]

    x舍入为 32 位浮点值(float)。asm.js 告诉引擎在内部使用float值(正常数字是双精度并占用 64 位)。

  • Math.imul(x: number, y: number): number [ES6]

    将两个 32 位整数xy相乘,并返回结果的低 32 位。需要 asm.js 。通过将 64 位结果强制转换为 32 位,可以模拟所有其他基本的 32 位数学运算。使用乘法,您可能会丢失超过 32 位的结果位。

16.6。各种其他函数

  • Math.abs(x: number): number [ES1]

    返回x的绝对值。

    > Math.abs(3)
    3
    > Math.abs(-3)
    3
    > Math.abs(0)
    0
  • Math.clz32(x: number): number [ES6]

    计算 32 位整数x中的前导零位。用于 DSP 算法。

    > Math.clz32(0b01000000000000000000000000000000)
    1
    > Math.clz32(0b00100000000000000000000000000000)
    2
    > Math.clz32(2)
    30
    > Math.clz32(1)
    31
  • Math.max(...values: number[]): number [ES1]

    values转换为数字并返回最大的数字。

    > Math.max(3, -5, 24)
    24
  • Math.min(...values: number[]): number [ES1]

    values转换为数字并返回最小的数字。

    > Math.min(3, -5, 24)
    -5
  • Math.random(): number [ES1]

    返回伪随机数n,其中 0 ≤ n < 1

    计算随机整数i,其中 0 ≤ i < max

    function getRandomInteger(max) {
      return Math.floor(Math.random() * max);
    }
  • Math.sign(x: number): number [ES6]

    返回数字的符号:

    > Math.sign(-8)
    -1
    > Math.sign(0)
    0
    > Math.sign(3)
    1

16.7。来源