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

📄 init.c

📁 calc大数库
💻 C
字号:
/* init.c */
#include <stdio.h>
#include "stack.h"
#include "integer.h"
#include "calc.h"
#ifdef _WIN32
#include "ytab.h"
#else
#include "y.tab.h"
#endif
#include "fun.h"
#include "wrappers.h"


void QSORTMPIX();


static struct { /* Built-ins which return POLYI */
  char *name;
  POLYI (*func)();
  int argTypes[3];
} builtinsp[]={
  { "primitive", PRIMITIVEPI_W ,  {1, POLY,0 } } ,
  { "deriv", DERIVPI_W ,  {1, POLY,0 } } ,
  { "gcdpi", GCDPI_W ,  {2, POLY , POLY } } ,
  { "cyclotomic", CYCLOTOMIC_W ,  {1, NUM,0} } ,
  {0, 0}
};
static struct { /* Built-ins which return *MPI */
  char *name;
  MPI *(*func)();
  int argTypes[10]; 
  /* Type of function is well defined in builtins.txt */
} builtins[] = {
	{ "gcd", GCD_W,  {2, NUM, NUM } },
	{ "lcm", LCM_W,  {2, NUM, NUM } },
	{ "lcma", LCM_ARRAY_W,  {1, ARR} },
	{ "gcdv", EUCLIDI_W,  {4, NUM, NUM, VARADR, VARADR} },
	{ "jacobi", JACOB_W,  {2, NUM, NUM} },
	{ "peralta", SQRTMX_W,  {2, NUM, NUM} },
	{ "gcda", GCD_ARRAY_W,  {1, ARR} },
	{ "gcdav", GCD_ARRAYVX_W,  {2, ARR, ARRADR} },
	{ "congr", CONGRX_W,  {4, NUM, NUM, NUM, VARADR} },
	{ "chinese", CHINESEX_W,  {5, NUM, NUM, NUM, NUM, VARADR} },
	{ "chinesea", CHINESE_ARRAYX_W,  {3, ARR, ARR, VARADR} },
	{ "mthroot", BIG_MTHROOTX_W,  {2, NUM, NUM} },
	{ "fund", FUND_UNITX_W,  {3, NUM, VARADR, VARADR} },
	{ "pell", PELX_W,  {4, NUM, NUM, VARADR, VARADR} },
	{ "surd", SURDX_W,  {9, NUM, NUM, NUM, NUM, ARRADR, ARRADR, ARRADR, ARRADR, ARRADR} },
	{ "mpower", MPOWERX_W,  {3, NUM, NUM, NUM} },
	{ "nprime", Nextprime_W,  {1, NUM} },
	{ "inv", INVERSEMX_W,  {2, NUM, NUM} },
	{ "factor", FACTORX_W,  {1, NUM} },
	{ "tau", DIVISORX_W,  {1, NUM} },
	{ "mobius", MOBIUSX_W,  {1, NUM} },
	{ "euler", EULERX_W,  {1, NUM} },
	{ "sigma", SIGMAX_W,  {1, NUM} },
	{ "lprimroot", LPRIMROOTX_W,  {1, NUM} },
	/*{ "orderp", ORDERPX_W,  {2, NUM, NUM} }, */
	/*	{ "orderq", ORDERQX_W,  {} }, */
	{ "orderm", ORDERMX_W,  {2, NUM, NUM} },
	/*	{ "lucasu", LUCASUX_W,  {} },
		{ "lucasb", LUCASBX_W,  {} }, */
	{ "lucas", LUCASX_W,  {1, NUM} },
	{ "length", LENGTHX_W,  {1, NUM} },
	/* 	{ "mult32", MULT32X_W,  {} }, */
	{ "rsae", RSAE_W,  {2, NUM, NUM} },
	{ "nprimeap", NEXTPRIMEAPX_W,  {3, NUM, NUM, NUM} },
	{ "pollard", POLLARD_W,  {1, NUM} },
	{ "elliptic", EFACTORX_W,  {3, NUM, NUM, NUM} },
	{ "perfectpower", PERFECT_POWER_W,  {1, NUM} },
	/*	{ "random", RANDOMI_W,  {} }, */
	{ "leastqnr", LEASTQNRX_W,  {1, NUM} },
	{ "content", CONTENTPI2_W,  {1, POLY} },
	{ "sqroot", SQROOT_W,  {5, NUM, NUM, ARRADR, VARADR, VARADR} },
	{ "congq", QUADRATIC_W,  {5, NUM, NUM, NUM, NUM, ARRADR} },
	{ "absmod", HALFMOD_W,  {2, NUM, NUM} },
	{ "ceil", CEILINGI_W,  {2, NUM, NUM} },
	{ "resultant", SUBRESULTANT_W,  {2, POLY, POLY} },
	{ "discriminant", DISCRIMINANTPI_W,  {1, POLY} },
	{ "primes", PRIME_GENERATOR_W,  {2, NUM, NUM} },
	{ "sturmsequence", STURM_SEQUENCE_W,  {3, POLY, NUM, NUM} },
	{ "classnop", POS_W,  {1, NUM } },
	{ "classnon", NEG_W,  {2, NUM, NUM } },
	{ "nearint", NEARINT_W,  {2, NUM, NUM} },
	{ "reduceneg", REDUCE_NEG_W,  {3, NUM, NUM, NUM} },
	{ "reducepos", REDUCE_POS_W,  {3, NUM, NUM, NUM} },
	{ "classnop0", POS0_W,  {1, NUM } },
	{ "tableneg", TABLENEG_W,  {2, NUM, NUM} },
	{ "tablepos", TABLEPOS_W,  {2, NUM, NUM} },
	{ "davison", DAVISON_W,  {3, NUM, NUM, NUM} },
	{ "raney", RANEY1_W,  {4, NUM, NUM, NUM, NUM} },
	{ "unimodular", UNIMODULAR_W,  {4, NUM, NUM, NUM, NUM} },
	{ "sigmak", SIGMAK_W,  {2, NUM, NUM} },
	{ "tauprimepower", TAU_PRIMEPOWER_W,  {2, NUM, NUM} },
	{ "ramanujan", TAU_COMPOSITE_W,  {1, NUM} },
	{ "repdefinite", REP_DEFINITE_W,  {5, NUM, NUM, NUM, NUM, NUM} },
	{ "euclid1", EUCLIDI1_W,  {2, NUM, NUM} },
	{ "cfracperiod", CFRAC_PERIOD_W,  {1, NUM} },
        { "cfracn", CFRACN_W,  {1, NUM} },
	{ 0, 0 }
};

static struct { /* Built-ins which return void */
  char *name;
  void (*func)();
  int argTypes[10];
} builtinsv[] = {
{ "serret", SERRET_W,  {3, NUM, VARADR, VARADR} },
{ "collatz", COLLATZ_W,  {2, NUM, NUM} },
{ "mthrootr", MTHROOTX_W,  {4, NUM, NUM, NUM, NUM} },
{ "miller", MILLERX_W,  {2, NUM, NUM} },
{ "juggler", JUGGLER_W,  {2, NUM, NUM} },
{ "hermite", HERMITE,  {0} },
{ "mlll", MLLL,  {0} },
{ "smith", SMITH,  {0} },
{ "encode", ENCODE_W,  {2, NUM, NUM} },
{ "decode", DECODEX_W,  {3, NUM, NUM, NUM} },
{ "egcd", EXTGCDX,  {0} },
{ "fp", FINCKE_POHSTX,  {0} },
{ "improvep", IMPROVEPX,  {0} },
  /*{ "qsort", QSORTMPIX_W,  {} },
{ "qsortmat", QSORTMATIX_W,  {} }, */
{ "sgcd", SCHNORRGCD_W,  {1, NUM} },
{ "inhomfp", SHORTESTTTX,  {0} },
/*{ "fibmin", FIB_MIN_W,  {} }, 
{ "printww", PRINTWW_W,  {} },
{ "printdefect", PRINT_DEFECT_W,  {} }, */
{ "addcubicr", ADD_CUBICRX,  {0} },
{ "powercubicr", POWER_CUBICRX,  {0} },
{ "shallit", SHALLIT,  {0} },
{ "lucasmin", LUCAS_MIN,  {0} },
{ "lllgcd", LLLGCDX,  {0} },
{ "jacobigcd", JACOBIGCDX,  {0} },
{ "shermite", SCHNORRHERMITE_W,  {1, NUM} },
{ "lllhermite", LLLHERMITE1X,  {0} },
  /*{ "gcd33", GCD33_W,  {} },
{ "gcd4", GCD4_W,  {} },
{ "gcd5", GCD5_W,  {} },
{ "gcd6", GCD6_W,  {} },
{ "gcd10", GCD10_W,  {} },
{ "gcd11", GCD11_W,  {} }, */
{ "euclid", EUCLID_W,  {7, NUM, NUM, ARRADR, ARRADR, ARRADR, ARRADR, VARADR} },
{ "convergents", CONVERGENTS_W,  {3, ARR, ARRADR, ARRADR } },
{ "lagrange", LAGRANGE_W,  {3, POLY, ARRADR, NUM} },
{ "axb", AXB1,  {0} },
/*{ "axb1", AXB_W,  {} },
{ "testaxb", TESTAXB_W,  {} }, */
/*{ "changel",CHANGELX_W,  {} }, 
{ "fermatq",FERMAT_QUOTIENT_W,  {} }, */
{ "lllgcd0", LLLGCD0X,  {0} },
{ "slv", SLVECTORX,  {0} },
  /*{ "gcdconj", GCD_CONJ_W,  {} },
{ "gcd3", GCD3_W,  {} }, 
{ "conj4", GCDCONJECTURE4_W,  {} },
{ "conj5", GCDCONJECTURE5_W,  {} },
{ "conj6", GCDCONJECTURE6_W,  {} },
{ "conj7", GCDCONJECTURE7_W,  {} },
{ "conjm", GCDCONJECTUREM_W,  {} }, */
{ "absnearint", ABS_NEAREST_INTRX,  {0} },
{ "cycle", CYCLEX,  {0} },
{ "addcubicm", ADD_CUBICMX,  {0} },
{ "powercubicm", POWER_CUBICMX,  {0} },
{ "ordercubicm", ORDER_CUBICMX,  {0} },
{ "powercubicr", POWER_CUBICRX,  {0} },
{ "ordercubicr", ORDER_CUBICRX,  {0} },
{ "sturm", STURM_W,  {1, POLY} },
{ "rootexp", ROOTEXPANSION,  {2, POLY, NUM} },
{ "intlog", INTLOG,  {4, NUM, NUM, NUM, NUM} },
{ "intlog1", INTLOG1,  {4, NUM, NUM, NUM, NUM} },
{ "log1", LOG1,  {5, NUM, NUM, NUM, NUM, NUM} },
{ "intlog2", INTLOG2,  {4, NUM, NUM, NUM, NUM} },
{ "logg", LOGG,  {5, NUM, NUM, NUM, NUM, NUM} },
{ "log2", LOGGG,  {6, NUM, NUM, NUM, NUM, NUM, NUM} },
{ "sqroot1", SQROOT1_W,  {3, NUM, NUM, NUM} },
{ "sqroot2", SQROOT2_W,  {2, NUM, NUM} },
{ "sqroot3", SQROOT3_W,  {3, NUM, NUM, NUM} },
{ "cornacchia", CORNACCHIA_W,  {3, NUM, NUM, NUM} },
{ "patz", PATZ_W,  {2, NUM, NUM} },
{ "shankslog", SHANKSLOG,  {4, NUM, NUM, NUM, NUM} },
/*{ "binaryform", BINARYFORM_W,  {4, NUM, NUM, NUM, NUM} },*/
{ "gauss", GAUSS_W,  {7, NUM, NUM, NUM, NUM, VARADR, VARADR, VARADR} },
{ "binform", BINFORM_W,  {5, NUM, NUM, NUM, NUM, NUM} },
{ "log", LOG_W,  {6, NUM, NUM, NUM, NUM, ARRADR, VARADR} },
{ "testlog1", TESTLOG1_W,  {4, NUM, NUM, NUM, NUM} },
{ "testlog", TESTLOG_W,  {5, NUM, NUM, NUM, NUM, NUM} },
{ "twoadicsqrt", TWOADICSQRT_W,  {3, NUM, NUM, ARRADR} },
{ "padicsqrt", PADICSQRT_W,  {4, NUM, NUM, NUM, ARRADR} },
{ "powerd", POWERD_W,  {6, NUM, NUM, NUM, NUM, VARADR, VARADR} },
{ 0, 0}
};

void init()
/* install built-ins in table */
{
  int i;
  Symbol *s;
  
  for (i = 0; builtins[i].name; i++)
    {
      s = installFunc(builtins[i].name, BLTIN, builtins[i].argTypes);
      s->u.ptr = builtins[i].func;
    }
  for (i = 0; builtinsp[i].name; i++)
    {
      s = installFunc(builtinsp[i].name, BLTINP, builtinsp[i].argTypes);
      s->u.ptrp = builtinsp[i].func;
    }
  for (i = 0; builtinsv[i].name; i++) 
    {
      s = installFunc(builtinsv[i].name, BLTINV, builtinsv[i].argTypes);
      s->u.ptrv = builtinsv[i].func;
    }
}

⌨️ 快捷键说明

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