diff options
author | Peter Mikkelsen <petermikkelsen10@gmail.com> | 2022-01-22 13:45:49 +0000 |
---|---|---|
committer | Peter Mikkelsen <petermikkelsen10@gmail.com> | 2022-01-22 13:45:49 +0000 |
commit | ba2c098932896234f17829e54399328cb24ed1be (patch) | |
tree | ccae2cbb99a380f9e414e4208daf77aef64a8756 | |
parent | 26ee5089659da12e3c060edfefd056e2196b4363 (diff) |
Implement dyadic | ⌊ and ⌈
-rw-r--r-- | apl9.h | 3 | ||||
-rw-r--r-- | functions.c | 32 |
2 files changed, 32 insertions, 3 deletions
@@ -255,6 +255,9 @@ Array *fnTimes(Array *, Array *); Array *fnDivide(Array *, Array *); Array *fnPower(Array *, Array *); Array *fnLogarithm(Array *, Array *); +Array *fnResidue(Array *, Array *); +Array *fnMaximum(Array *, Array *); +Array *fnMinimum(Array *, Array *); Array *fnLeft(Array *, Array *); Array *fnRight(Array *, Array *); Array *fnMatch(Array *, Array *); diff --git a/functions.c b/functions.c index daff046..43a2505 100644 --- a/functions.c +++ b/functions.c @@ -72,9 +72,9 @@ fndyad dyadfunctiondefs[] = { 0, /* ○ */ 0, /* ! */ 0, /* ? */ - 0, /* | */ - 0, /* ⌈ */ - 0, /* ⌊ */ + fnResidue, /* | */ + fnMaximum, /* ⌈ */ + fnMinimum, /* ⌊ */ 0, /* ⊥ */ 0, /* ⊤ */ fnLeft, /* ⊣ */ @@ -592,6 +592,32 @@ SCALAR_FUNCTION_2(fnLogarithm, 1, break; ) +SCALAR_FUNCTION_2(fnResidue, 1, + case AtypeFloat: + if(res->floatdata[i] == 0) + res->floatdata[i] = right->floatdata[i]; + else + res->floatdata[i] = right->floatdata[i] - res->floatdata[i] * floor(right->floatdata[i]/res->floatdata[i]); +) + +SCALAR_FUNCTION_2(fnMaximum, 0, + case AtypeFloat: + if(res->floatdata[i] < right->floatdata[i]) + res->floatdata[i] = right->floatdata[i]; + case AtypeInt: + if(res->intdata[i] < right->intdata[i]) + res->intdata[i] = right->intdata[i]; +) + +SCALAR_FUNCTION_2(fnMinimum, 0, + case AtypeFloat: + if(res->floatdata[i] > right->floatdata[i]) + res->floatdata[i] = right->floatdata[i]; + case AtypeInt: + if(res->intdata[i] > right->intdata[i]) + res->intdata[i] = right->intdata[i]; +) + Array * fnLeft(Array *left, Array *right) { |