✨ add new functions in bits & math lib
This commit is contained in:
parent
56762d719d
commit
5cc9824a62
61
std/bits.nas
61
std/bits.nas
|
@ -58,3 +58,64 @@ var setfld = func(str, startbit, len, val) {
|
|||
var buf = func(len) {
|
||||
return __buf;
|
||||
}
|
||||
|
||||
var bit = [var __ = 1];
|
||||
for(var i = 1; i<32; i += 1) {
|
||||
func(vec, arg...){
|
||||
return __append;
|
||||
}(bit, __ += __);
|
||||
}
|
||||
|
||||
var test = func(n, b) {
|
||||
n /= bit[b];
|
||||
return int(n) != int(n/2)*2;
|
||||
}
|
||||
|
||||
# returns number <n> with bit <b> set
|
||||
var set = func(n, b) {
|
||||
return n+!test(n, b)*bit[b];
|
||||
}
|
||||
|
||||
|
||||
# returns number <n> with bit <b> cleared
|
||||
var clear = func(n, b) {
|
||||
return n-test(n, b)*bit[b];
|
||||
}
|
||||
|
||||
|
||||
# returns number <n> with bit <b> toggled
|
||||
var toggle = func(n, b) {
|
||||
return test(n, b) ? (n-bit[b]):(n+bit[b]);
|
||||
}
|
||||
|
||||
|
||||
# returns number <n> with bit <b> set to value <v>
|
||||
var switch = func(n, b, v) {
|
||||
return n-(test(n, b)-!!v)*bit[b];
|
||||
}
|
||||
|
||||
|
||||
# returns number <n> as bit string, zero-padded to <len> digits:
|
||||
# bits.string(6) -> "110"
|
||||
# bits.string(6, 8) -> "00000110"
|
||||
var string = func(n, len = 1) {
|
||||
var s = "";
|
||||
while (n) {
|
||||
var v = int(n/2);
|
||||
s = (v+v!=n)~s;
|
||||
n = v;
|
||||
}
|
||||
for (var i = size(s); i<len; i += 1)
|
||||
s = '0'~s;
|
||||
return s;
|
||||
}
|
||||
|
||||
|
||||
# returns bit string <s> as number: bits.value("110") -> 6
|
||||
var value = func(s) {
|
||||
var n = 0;
|
||||
var len = size(s);
|
||||
for (var i = 0; i<len; i += 1)
|
||||
n += n+(s[i]!= `0`);
|
||||
return n;
|
||||
}
|
44
std/math.nas
44
std/math.nas
|
@ -21,6 +21,10 @@ 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,
|
||||
|
@ -57,6 +61,9 @@ var ln = func(x) {
|
|||
return __ln(x);
|
||||
}
|
||||
|
||||
var _iln10 = 1/ln(10);
|
||||
var log10 = lg;
|
||||
|
||||
var sqrt = func(x) {
|
||||
return __sqrt(x);
|
||||
}
|
||||
|
@ -69,10 +76,39 @@ var isnan = func(x) {
|
|||
return __isnan(x);
|
||||
}
|
||||
|
||||
var max = func(x, y) {
|
||||
return x>y? x:y;
|
||||
var max = func(x, arg...) {
|
||||
var res = x;
|
||||
foreach(var i;arg) {
|
||||
if (i>res) {
|
||||
res = i;
|
||||
}
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
var min = func(x, y) {
|
||||
return x<y? x:y;
|
||||
var min = func(x, arg...) {
|
||||
var res = x;
|
||||
foreach(var i;arg) {
|
||||
if (i<res) {
|
||||
res = i;
|
||||
}
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
|
@ -1,8 +1,6 @@
|
|||
import.std.runtime;
|
||||
|
||||
var mod=func(n,a){
|
||||
return n-int(n/a)*a;
|
||||
}
|
||||
var mod = math.mod;
|
||||
|
||||
var main=func(run_time){
|
||||
var ts=maketimestamp();
|
||||
|
|
Loading…
Reference in New Issue