[BACK]Return to sqrt.c CVS log [TXT][DIR] Up to [local] / OpenXM_contrib / gmp / mpz

Diff for /OpenXM_contrib/gmp/mpz/Attic/sqrt.c between version 1.1.1.2 and 1.1.1.3

version 1.1.1.2, 2000/09/09 14:12:58 version 1.1.1.3, 2003/08/25 16:06:34
Line 1 
Line 1 
 /* mpz_sqrt(root, u) --  Set ROOT to floor(sqrt(U)).  /* mpz_sqrt(root, u) --  Set ROOT to floor(sqrt(U)).
   
 Copyright (C) 1991, 1993, 1994, 1996, 2000 Free Software Foundation, Inc.  Copyright 1991, 1993, 1994, 1996, 2000, 2001 Free Software Foundation, Inc.
   
 This file is part of the GNU MP Library.  This file is part of the GNU MP Library.
   
Line 24  MA 02111-1307, USA. */
Line 24  MA 02111-1307, USA. */
 #include "gmp-impl.h"  #include "gmp-impl.h"
   
 void  void
 #if __STDC__  
 mpz_sqrt (mpz_ptr root, mpz_srcptr op)  mpz_sqrt (mpz_ptr root, mpz_srcptr op)
 #else  
 mpz_sqrt (root, op)  
      mpz_ptr root;  
      mpz_srcptr op;  
 #endif  
 {  {
   mp_size_t op_size, root_size;    mp_size_t op_size, root_size;
   mp_ptr root_ptr, op_ptr;    mp_ptr root_ptr, op_ptr;
Line 40  mpz_sqrt (root, op)
Line 34  mpz_sqrt (root, op)
   
   TMP_MARK (marker);    TMP_MARK (marker);
   op_size = op->_mp_size;    op_size = op->_mp_size;
   if (op_size < 0)    if (op_size <= 0)
     SQRT_OF_NEGATIVE;      {
         if (op_size < 0)
           SQRT_OF_NEGATIVE;
         SIZ(root) = 0;
         return;
       }
   
   /* The size of the root is accurate after this simple calculation.  */    /* The size of the root is accurate after this simple calculation.  */
   root_size = (op_size + 1) / 2;    root_size = (op_size + 1) / 2;
Line 57  mpz_sqrt (root, op)
Line 56  mpz_sqrt (root, op)
           free_me_size = root->_mp_alloc;            free_me_size = root->_mp_alloc;
         }          }
       else        else
         (*_mp_free_func) (root_ptr, root->_mp_alloc * BYTES_PER_MP_LIMB);          (*__gmp_free_func) (root_ptr, root->_mp_alloc * BYTES_PER_MP_LIMB);
   
       root->_mp_alloc = root_size;        root->_mp_alloc = root_size;
       root_ptr = (mp_ptr) (*_mp_allocate_func) (root_size * BYTES_PER_MP_LIMB);        root_ptr = (mp_ptr) (*__gmp_allocate_func) (root_size * BYTES_PER_MP_LIMB);
       root->_mp_d = root_ptr;        root->_mp_d = root_ptr;
     }      }
   else    else
Line 81  mpz_sqrt (root, op)
Line 80  mpz_sqrt (root, op)
   root->_mp_size = root_size;    root->_mp_size = root_size;
   
   if (free_me != NULL)    if (free_me != NULL)
     (*_mp_free_func) (free_me, free_me_size * BYTES_PER_MP_LIMB);      (*__gmp_free_func) (free_me, free_me_size * BYTES_PER_MP_LIMB);
   TMP_FREE (marker);    TMP_FREE (marker);
 }  }

Legend:
Removed from v.1.1.1.2  
changed lines
  Added in v.1.1.1.3

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>