Skip to content

Latest commit

 

History

History
81 lines (53 loc) · 2.01 KB

10.4.Math.md

File metadata and controls

81 lines (53 loc) · 2.01 KB

10.4.Math

Haxe 包括了一个浮点数数学库,用于一些常见的数学运算。多数函数用于操作和返回浮点数。然而,一个 Int 类型 可以用于接受 Float 的地方,Haxe也会在多数数值运算中转换Int 为 Float(查看数值运算符(第2.1.3)了解更多)。

这里是一些math库使用的例子:

class Main {
  static public function main() {
    var x = 1/2;
    var y = 20.2;
    var z = -2;

    trace(Math.abs(z)); //2
    trace(Math.sin(x*Math.PI)); //1
    trace(Math.ceil(y)); //21

    // log is the natural logarithm
    trace(Math.log(Math.exp(5))); //5

    // Output for neko target, may vary
    // depending on platform
    trace(1/0); //inf
    trace(-1/0); //-inf
    trace(Math.sqrt(-1)); //nan
  }
}

查看 Math API 了解所有可用的函数。

10.4.1.特殊数值

math 库有一些关于特殊数值的定义:

  • NaN(非数字):当一个不正确的数学操作被执行时返回,例如 Math.sqrt(-1)。
  • POSITIVE_INFINITY:如一个整数被 0 除。
  • NEGATIVE_INFINITY :例如一个负数被 0 除 。
  • PI : 3.1415...

10.4.2.数学错误

虽然 neko 可以流畅的处理数学错误,如除数为 0 ,这在所有目标语言都是不正确的。根据不同的目标平台,数学错误可能引发异并引起错误。

10.4.3.整数数学

如果你的目标平台可以利用整数运算,例如整数除法,它可以被包裹到 Std.int() 中 来改进性能。Haxe编译器就可以对整数运算进行优化。一个例子:

var intDivision = Std.int(6.2/4.7);

10.4.4.扩展

经常看到静态扩展使用 math 库。这个代码展示一个简单的例子:

class MathStaticExtension {
  /* Converts an angle in radians to degrees */
  inline public static function toDegrees(radians:Float):Float {
    return radians * 180 / Math.PI;
  }
}
using MathStaticExtension;

class Main {
  public static function main() {
    var ang = 1/2*Math.PI;
    trace(ang.toDegrees()); //90
  }
}