[Math] 算术计算常用的库
属性:
Math.MaxInt, 表示Jass能表示的整数最大值2147483647= 0x7FFFFFFF
Math.MinInt, 表示整数最小值-2147483648= -0x80000000
Math.Tolerance, 表示Jass的精确度, 为0.000001, 即小数点后6位.
Math.PI, 表示pi的值, 3.1415927
Math.E, 表示自然常数e的值, 2.7182818
Math.Random->real, 返回一个介于0和1之间的随机数, 请注意, 这是个虚拟属性, 而不是方法
方法:
Math.GetRandomReal (real low, real high)->real, 返回介于low和high之间的随机小数
Math.GetRandomInt (integer low, integer high)->integer, 返回介于low和high之间的随机整数
Math.Sign (real r)->real, 返回r的符号类型, 若r< 0则返回-1.0, r= 0返回0.0, r>0返回1.0
Math.ISign (integer r)->real, 同上, 不过参数和返回值都是整数
Math.Abs (real r)->real, 返回r的绝对值
Math.IAbs (integer r)->integer, 同上, 参数和返回值都是整数
Math.Min (real a, real b)->real 返回a, b的最小值
Math.IMin (integer a, integer b)->integer, 同上, ...整数
Math.Max (real a, real b)->real, 返回最大值
Math.IMin (integer a, integer b)->integer, 同上, ...整数
Math.Clamp (real value, real low, real high)->real, 返回在low和high之间的最接近value的数
Math.IClamp (integer value, integer low, integer high)->integer, 同上...整数
Math.Equals (real a, real b, real tolerance)->boolean, 判断在误差为tolerance时,a是否近似和b相等
Math.IsZero (real r)->boolena, 判断在误差允许的范围内, 实数r是否和0相等
Math.ToRadians (real r)->real, 将角度转换成弧度
Math.ToDegrees (real r)->real, 将弧度转换成角度
Math.Sin,...Cos, Tan, Asin, Acos, Atan, Atan2, Sinh, Cosh, Tanh, Ceil, Floor, Round不解释
Math.Sqr (real r)->real, 平方
Math.Sqrt (real r)->real, 平方根
Math.InvSqrt (real r)->real, 平方根的倒数
Math.Cbr (real r)->real, 立方
Math.Cbrt (real r)->real, 立方根
Math.InvCbrt (real r)->real, 立方根的倒数
Math.Power (real a, real power)->real, 乘方
Math.Exp (real power)->real, 常数e的幂
Math.Log (real r, real a)->real, log运算
Math.Lg (real r)->real, log10
Math.Ln (real r)->real, ln
Math.Hypot (real x, real y)->real, 返回坐标(x, y)到原点的距离
Math.Modulo (real dividend, real divisor)->real, 模
Math.IModulo (integer dividend, integer divisor)->integer, 同上,... 整数
Math.Rint (real r)->real, 四舍五入运算, 与Math.Round不同的是, 若r得小数部分为0.5, 返回值为离r最近的偶数
IEEERemainder (real dividend, real divisor)->real, IEEE754标准的模运算
在设计这个Math库时, 我特意测试了一些Jass的精确度, 以及整数边界, 发现了它的很多特点.
当一个正整数超过2147483647, 则会溢出, 变为负数, 也就是2147483648= 2147483647+ 1= -2147483648. 但是这溢出并不会算是错误, 只有当这个正整数大于0xFFFFFFFF= -1时才会引发错误.
另外, jass的==符号在比较小数时, 是非常不精确的. 0== 0.0009甚至是true, 0== 0.001则是false. 不过!=号却非常精确, 也就是说如果要确定小数a和b是否绝对相等, 正确的做法是!(a!= b), 而不是直接写上a== b