From ba2c098932896234f17829e54399328cb24ed1be Mon Sep 17 00:00:00 2001 From: Peter Mikkelsen Date: Sat, 22 Jan 2022 13:45:49 +0000 Subject: =?UTF-8?q?Implement=20dyadic=20|=20=E2=8C=8A=20and=20=E2=8C=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- functions.c | 32 +++++++++++++++++++++++++++++--- 1 file changed, 29 insertions(+), 3 deletions(-) (limited to 'functions.c') 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) { -- cgit v1.2.3