⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mapmipwr.c

📁 任意精度的数学库
💻 C
字号:
/*  *  M_APM  -  mapmipwr.c * *  Copyright (C) 1999   Michael C. Ring * *  Permission to use, copy, and distribute this software and its *  documentation for any purpose with or without fee is hereby granted,  *  provided that the above copyright notice appear in all copies and  *  that both that copyright notice and this permission notice appear  *  in supporting documentation. * *  Permission to modify the software is granted, but not the right to *  distribute the modified code.  Modifications are to be distributed  *  as patches to released version. *   *  This software is provided "as is" without express or implied warranty. *//* *      $Id: mapmipwr.c,v 1.2 1999/09/18 01:34:35 mike Exp $ * *      This file contains the Integer Power function. * *      $Log: mapmipwr.c,v $ *      Revision 1.2  1999/09/18 01:34:35  mike *      minor tweaks * *      Revision 1.1  1999/09/18 01:33:09  mike *      Initial revision */#include "m_apm_lc.h"/****************************************************************************/void	m_apm_integer_pow(rr,places,aa,mexp)M_APM	rr, aa;int	places, mexp;{M_APM   tmp0, tmpy, tmpz;int	nexp, ii, signflag, local_precision;if (aa->m_apm_sign == 0)  {   rr->m_apm_datalength = 1;   rr->m_apm_sign       = 0;   rr->m_apm_exponent   = 0;   rr->m_apm_data[0]    = 0;   return;  }if (mexp == 0)  {   m_apm_copy(rr, MM_One);   return;  }else  {   if (mexp > 0)     {      signflag = 0;      nexp     = mexp;     }   else     {      signflag = 1;      nexp     = -mexp;     }  }tmp0 = M_get_stack_var();tmpy = M_get_stack_var();tmpz = M_get_stack_var();local_precision = places + 8;m_apm_copy(tmpy, MM_One);m_apm_copy(tmpz, aa);while (TRUE)  {   ii   = nexp & 1;   nexp = nexp >> 1;   if (ii != 0)                       /* exponent is odd */     {      m_apm_multiply(tmp0, tmpy, tmpz);      m_apm_round(tmpy, local_precision, tmp0);      if (nexp == 0)        break;     }   m_apm_multiply(tmp0, tmpz, tmpz);   m_apm_round(tmpz, local_precision, tmp0);  }if (signflag)  {   m_apm_divide(tmp0, (places + 6), MM_One, tmpy);   m_apm_round(rr, places, tmp0);  }else  {   m_apm_round(rr, places, tmpy);  }M_restore_stack(3);}/****************************************************************************/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -