124 lines
2.1 KiB
Plaintext
124 lines
2.1 KiB
Plaintext
# math.nas
|
|
# 2023 by ValKmjolnir
|
|
# mostly used math functions and special constants, you know.
|
|
|
|
# constant e
|
|
var e = 2.7182818284590452354;
|
|
|
|
# constant pi
|
|
var pi = 3.14159265358979323846264338327950288;
|
|
|
|
# maybe useless, just tell you
|
|
# how to make inf and nan in IEEE754 double.
|
|
# carefully using these two constants,
|
|
# may cause critical error in calculation.
|
|
var inf = 1/0;
|
|
|
|
# nan can be created by (inf - inf) or (-inf + inf)
|
|
var nan = 0/0;
|
|
|
|
var abs = func(x) {
|
|
return x>0? x:-x;
|
|
}
|
|
|
|
var sgn = func(x) {
|
|
return x<0? -1:(x>0);
|
|
}
|
|
|
|
# floor will get the integral number of input argument
|
|
# which is less than or equal to this argument.
|
|
# this is basic native function in old nasal,
|
|
# but we think it should have a copy in math module.
|
|
var floor = func(x) {
|
|
return __floor(x);
|
|
}
|
|
|
|
var pow = func(x, y) {
|
|
return __pow(x, y);
|
|
}
|
|
|
|
var sin = func(x) {
|
|
return __sin(x);
|
|
}
|
|
|
|
var cos = func(x) {
|
|
return __cos(x);
|
|
}
|
|
|
|
var tan = func(x) {
|
|
return __tan(x);
|
|
}
|
|
|
|
var exp = func(x) {
|
|
return __exp(x);
|
|
}
|
|
|
|
var lg = func(x) {
|
|
return __lg(x);
|
|
}
|
|
|
|
var ln = func(x) {
|
|
return __ln(x);
|
|
}
|
|
|
|
var _iln10 = 1/ln(10);
|
|
|
|
# log10 is alias of lg
|
|
var log10 = lg;
|
|
|
|
var sqrt = func(x) {
|
|
return __sqrt(x);
|
|
}
|
|
|
|
var atan2 = func(x, y) {
|
|
return __atan2(x, y);
|
|
}
|
|
|
|
var isnan = func(x) {
|
|
return __isnan(x);
|
|
}
|
|
|
|
var max = func(x, arg...) {
|
|
var res = x;
|
|
foreach(var i;arg) {
|
|
if (i>res) {
|
|
res = i;
|
|
}
|
|
}
|
|
return res;
|
|
}
|
|
|
|
var min = func(x, arg...) {
|
|
var res = x;
|
|
foreach(var i;arg) {
|
|
if (i<res) {
|
|
res = i;
|
|
}
|
|
}
|
|
return res;
|
|
}
|
|
|
|
var avg = func(arg...) {
|
|
var x = 0;
|
|
foreach(var i;arg) {
|
|
x += i;
|
|
}
|
|
return x/size(arg);
|
|
}
|
|
|
|
var mod = func(n, m) {
|
|
var x = n-int(n/m)*m;
|
|
return x<0? x+abs(m):x;
|
|
}
|
|
|
|
var fmod = func(n, m) {
|
|
return n-int(n/m)*m;
|
|
}
|
|
|
|
var clamp = func(value, min, max) {
|
|
return (value<min)? min:((value>max)? max:value);
|
|
}
|
|
|
|
var approx_eq = func(a, b, d = 0.000001) {
|
|
return abs(a-b)<d;
|
|
} |