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 了解所有可用的函数。
math 库有一些关于特殊数值的定义:
- NaN(非数字):当一个不正确的数学操作被执行时返回,例如 Math.sqrt(-1)。
- POSITIVE_INFINITY:如一个整数被 0 除。
- NEGATIVE_INFINITY :例如一个负数被 0 除 。
- PI : 3.1415...
虽然 neko 可以流畅的处理数学错误,如除数为 0 ,这在所有目标语言都是不正确的。根据不同的目标平台,数学错误可能引发异并引起错误。
如果你的目标平台可以利用整数运算,例如整数除法,它可以被包裹到 Std.int() 中 来改进性能。Haxe编译器就可以对整数运算进行优化。一个例子:
var intDivision = Std.int(6.2/4.7);
经常看到静态扩展使用 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
}
}