summaryrefslogtreecommitdiff
path: root/ops.c
diff options
context:
space:
mode:
Diffstat (limited to 'ops.c')
-rw-r--r--ops.c50
1 files changed, 50 insertions, 0 deletions
diff --git a/ops.c b/ops.c
new file mode 100644
index 0000000..0ba58ba
--- /dev/null
+++ b/ops.c
@@ -0,0 +1,50 @@
+#include "bc.h"
+#include <stdlib.h>
+
+bc_num *bc_mul(bc_num *a, bc_num *b)
+{
+ bc_num *num = calloc(1, sizeof(*num));
+ num->n = a->n * b->n;
+ return num;
+}
+
+bc_num *bc_div(bc_num *a, bc_num *b)
+{
+ bc_num *num = calloc(1, sizeof(*num));
+ num->n = a->n / b->n;
+ return num;
+}
+
+bc_num *bc_mod(bc_num *a, bc_num *b)
+{
+ bc_num *num = calloc(1, sizeof(*num));
+ num->n = a->n % b->n;
+ return num;
+}
+
+bc_num *bc_add(bc_num *a, bc_num *b)
+{
+ bc_num *num = calloc(1, sizeof(*num));
+ num->n = a->n + b->n;
+ return num;
+}
+
+bc_num *bc_sub(bc_num *a, bc_num *b)
+{
+ bc_num *num = calloc(1, sizeof(*num));
+ num->n = a->n - b->n;
+ return num;
+}
+
+bc_num *bc_pow(bc_num *a, bc_num *b)
+{
+ bc_num *num = calloc(1, sizeof(*num));
+ /* raise a^b */
+ return num;
+}
+
+bc_num *bc_neg(bc_num *a)
+{
+ a->n = - a->n;
+ return a;
+}