Back to index

php5  5.3.10
Functions
sub.c File Reference
#include <config.h>
#include <stdio.h>
#include <assert.h>
#include <stdlib.h>
#include <ctype.h>
#include <stdarg.h>
#include "bcmath.h"
#include "private.h"

Go to the source code of this file.

Functions

void bc_sub (bc_num n1, bc_num n2, bc_num *result, int scale_min)

Function Documentation

void bc_sub ( bc_num  n1,
bc_num  n2,
bc_num result,
int  scale_min 
)

Definition at line 47 of file sub.c.

{
  bc_num diff = NULL;
  int cmp_res;
  int res_scale;

  if (n1->n_sign != n2->n_sign)
    {
      diff = _bc_do_add (n1, n2, scale_min);
      diff->n_sign = n1->n_sign;
    }
  else
    {
      /* subtraction must be done. */
      /* Compare magnitudes. */
      cmp_res = _bc_do_compare (n1, n2, FALSE, FALSE);
      switch (cmp_res)
       {
       case -1:
         /* n1 is less than n2, subtract n1 from n2. */
         diff = _bc_do_sub (n2, n1, scale_min);
         diff->n_sign = (n2->n_sign == PLUS ? MINUS : PLUS);
         break;
       case  0:
         /* They are equal! return zero! */
         res_scale = MAX (scale_min, MAX(n1->n_scale, n2->n_scale));
         diff = bc_new_num (1, res_scale);
         memset (diff->n_value, 0, res_scale+1);
         break;
       case  1:
         /* n2 is less than n1, subtract n2 from n1. */
         diff = _bc_do_sub (n1, n2, scale_min);
         diff->n_sign = n1->n_sign;
         break;
       }
    }

  /* Clean up and return. */
  bc_free_num (result);
  *result = diff;
}

Here is the call graph for this function:

Here is the caller graph for this function: