Fix a bug where bc made subtraction and mod not work
diff --git a/src/bc/program.c b/src/bc/program.c
index 1b692eb..8f24f89 100644
--- a/src/bc/program.c
+++ b/src/bc/program.c
@@ -555,17 +555,30 @@
       case BC_INST_OP_DIVIDE:
       case BC_INST_OP_POWER:
       {
-        BcNum* num1;
-        BcNum* num2;
+        BcNum* ptr;
+        BcNum num1;
+        BcNum num2;
         BcNum result;
 
-        num2 = bc_vec_top(&p->stack);
+        ptr = bc_vec_top(&p->stack);
 
-        if (!num2) return BC_STATUS_VM_INVALID_EXPR;
+        if (!ptr) return BC_STATUS_VM_INVALID_EXPR;
 
-        num1 = bc_vec_top(&p->stack);
+        num2 = *ptr;
 
-        if (!num1) return BC_STATUS_VM_INVALID_EXPR;
+        status = bc_vec_pop(&p->stack);
+
+        if (status) return status;
+
+        ptr = bc_vec_top(&p->stack);
+
+        if (!ptr) return BC_STATUS_VM_INVALID_EXPR;
+
+        num1 = *ptr;
+
+        status = bc_vec_pop(&p->stack);
+
+        if (status) return status;
 
         result.type = BC_NUM_RESULT;
         result.num = arb_alloc(16);
@@ -576,20 +589,12 @@
 
           op = bc_math_ops[inst - BC_INST_OP_MODULUS];
 
-          result.num = op(num1->num, num2->num, result.num, 10, 10);
+          result.num = op(num1.num, num2.num, result.num, 10, 10);
         }
         else {
           // TODO: Power.
         }
 
-        status = bc_vec_pop(&p->stack);
-
-        if (status) return status;
-
-        status = bc_vec_pop(&p->stack);
-
-        if (status) return status;
-
         status = bc_vec_push(&p->stack, &result);
 
         break;