# 数学

与 JavaScript 中已知的数学运算。

Math API 非常类似于 JavaScript 的 (MDN (在新窗口打开)), 除了上面提到的显著例外,并且 rest 参数尚不支持。

# 变体

AssemblyScript 中的 Math 以多种变体提供。

变体 描述
NativeMath f64 的 WebAssembly 实现
NativeMathf f32 的 WebAssembly 实现
JSMath f64 的 JavaScript 实现(从宿主导入)

默认情况下,全局 Math 对象是 NativeMath 的别名,MathfNativeMathf 的别名。

# 使用 JSMath

默认情况下,编译器使用 NativeMath,它直接在 WebAssembly 中实现,但在模块大小比性能更重要的情况下,可以添加 --use Math=JSMath 到命令行以覆盖默认值,本质上将 MathJSMath 设为别名,它映射到对浏览器数学实现的导入。当然,此选项需要将浏览器的 Math 对象整体导入,但不需要播种/不可播种。生成的绑定在此场景中会自动处理浏览器的数学导入。

# 静态成员

下面的类型 T 根据所用实现替换为 f32f64。请注意,Math 实际上不是泛型,但 MathMathf 等具体实现具有相同的接口,只是在实现的浮点精度方面有所不同,由 T 表示。

# 常量

  • const E: T
    

    自然对数的底数 e,约为 2.718。

  • const LN2: T
    

    2 的自然对数,约为 0.693。

  • const LN10: T
    

    10 的自然对数,约为 2.302。

  • const LOG2E: T
    

    e 的以 2 为底的对数,约为 1.442。

  • const LOG10E: T
    

    e 的以 10 为底的对数,约为 0.434。

  • const PI: T
    

    圆周长与其直径之比,约为 3.14159。

  • const SQRT1_2: T
    

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

  • const SQRT2: T
    

    2 的平方根,约为 1.414。

# 函数

  • function abs(x: T): T
    

    返回 x 的绝对值。

  • function acos(x: T): T
    

    返回 x 的反余弦(以弧度为单位)。

  • function acosh(x: T): T
    

    返回 x 的双曲反余弦。

  • function asin(x: T): T
    

    返回 x 的反正弦(以弧度为单位)。

  • function asinh(x: T): T
    

    返回 x 的双曲反正弦。

  • function atan(x: T): T
    

    返回 x 的反正切(以弧度为单位)。

  • function atan2(y: T, x: T): T
    

    返回其参数商的反正切。

  • function atanh(x: T): T
    

    返回 x 的双曲反正切。

  • function cbrt(x: T): T
    

    返回 x 的立方根。

  • function ceil(x: T): T
    

    返回大于或等于 x 的最小整数。

  • function clz32(x: T): T
    

    返回 x 的 32 位二进制表示中前导零位的数量。

  • function cos(x: T): T
    

    返回 x 的余弦(以弧度为单位)。

  • function cosh(x: T): T
    

    返回 x 的双曲余弦。

  • function exp(x: T): T
    

    返回 e 的 x 次方。

  • function expm1(x: T): T
    

    返回 e 的 x 次方减 1。

  • function floor(x: T): T
    

    返回小于或等于 x 的最大整数。

  • function fround(x: T): T
    

    返回 x 的最接近的 32 位单精度浮点数表示。

  • function hypot(value1: T, value2: T): T
    

    返回其参数的平方和的平方根。

  • function imul(a: T, b: T): T
    

    返回 ab 的 C 风格 32 位乘法的结果。

  • function log(x: T): T
    

    返回 x 的自然对数(以 e 为底)。

  • function log10(x: T): T
    

    返回 x 的以 10 为底的对数。

  • function log1p(x: T): T
    

    返回 1 + x 的自然对数(以 e 为底)。

  • function log2(x: T): T
    

    返回 x 的以 2 为底的对数。

  • function max(value1: T, value2: T): T
    

    返回其参数中值最大的数字。

  • function min(value1: T, value2: T): T
    

    返回其参数中值最小的数字。

  • function pow(base: T, exponent: T): T
    

    返回 baseexponent 次方。

  • function random(): T
    

    返回范围从 0.0(包含)到 1.0(不包含)的伪随机数。

    请注意,Math.random 需要一种方式来播种随机数生成器,这可以通过 特殊导入 env.seed 来实现,它将种子作为 f64 值返回。生成的绑定和 WASI 会自动处理它。

  • function round(x: T): T
    

    返回将 x 四舍五入到最接近的整数的值。

  • function seedRandom(value: i64): void
    

    播种 random 函数。如果种子尚未设置,则由 random 在内部调用。

  • function sign(x: T): T
    

    返回 x 的符号,指示该数字是正数、负数还是零。

  • function signbit(x: T): bool
    

    返回 x 的符号位是否已设置。

  • function sin(x: T): T
    

    返回 x 的正弦。

  • function sinh(x: T): T
    

    返回 x 的双曲正弦。

  • function sqrt(x: T): T
    

    返回 x 的平方根。

  • function tan(x: T): T
    

    返回 x 的正切。

  • function tanh(x: T): T
    

    返回 x 的双曲正切。

  • function trunc(x: T): T
    

    通过删除任何小数位返回 x 的整数部分。

# 注意事项

Math 实现旨在作为 JavaScript Math 的即插即用替换,具有其所有怪癖。例如,Math.round 始终向 +Infinity 四舍五入,Math.imul 和类似函数对 number 进行操作,在 AssemblyScript 中为 f64。因此,在可能的情况下直接使用 WebAssembly 的数学指令 通常更高效。