Fix problem with sub that was ruining arctangent
diff --git a/src/bc/num.c b/src/bc/num.c
index 0ea605e..7322380 100644
--- a/src/bc/num.c
+++ b/src/bc/num.c
@@ -352,12 +352,12 @@
     return BC_STATUS_SUCCESS;
   }
   else if (cmp > 0) {
-    neg = sub ? a->neg : !a->neg;
+    neg = sub && a->neg;
     minuend = a;
     subtrahend = b;
   }
   else {
-    neg = sub ? !b->neg : b->neg;
+    neg = sub && !b->neg;
     minuend = b;
     subtrahend = a;
   }
@@ -1765,27 +1765,14 @@
 }
 
 BcStatus bc_num_add(BcNum *a, BcNum *b, BcNum *result, size_t scale) {
-
-  BcNumBinaryFunc op;
-
   (void) scale;
-
-  if ((a->neg && b->neg) || (!a->neg && !b->neg)) op = bc_num_alg_a;
-  else op = bc_num_alg_s;
-
+  BcNumBinaryFunc op = (!!a->neg == !!b->neg) ? bc_num_alg_a : bc_num_alg_s;
   return bc_num_binary(a, b, result, false, op, a->len + b->len + 1);
 }
 
 BcStatus bc_num_sub(BcNum *a, BcNum *b, BcNum *result, size_t scale) {
-
-  BcNumBinaryFunc op;
-
   (void) scale;
-
-  if (a->neg && b->neg) op = bc_num_alg_s;
-  else if (a->neg || b->neg) op = bc_num_alg_a;
-  else op = bc_num_alg_s;
-
+  BcNumBinaryFunc op = (!!a->neg == !!b->neg) ? bc_num_alg_s : bc_num_alg_a;
   return bc_num_binary(a, b, result, true, op, a->len + b->len + 1);
 }