Files
2025-02-Numerical/lib/nr/k_and_r/recipes/arcmak.c
2025-09-12 18:55:25 +09:00

33 lines
748 B
C

#include "nrutil.h"
#define MC 512
#ifdef ULONG_MAX
#define MAXINT (ULONG_MAX >> 1)
#else
#define MAXINT 2147483647
#endif
typedef struct {
unsigned long *ilob,*iupb,*ncumfq,jdif,nc,minint,nch,ncum,nrad;
} arithcode;
void arcmak(nfreq,nchh,nradd,acode)
arithcode *acode;
unsigned long nchh,nfreq[],nradd;
{
unsigned long j;
if (nchh > MC) nrerror("input radix may not exceed MC in arcmak.");
if (nradd > 256) nrerror("output radix may not exceed 256 in arcmak.");
acode->minint=MAXINT/nradd;
acode->nch=nchh;
acode->nrad=nradd;
acode->ncumfq[1]=0;
for (j=2;j<=acode->nch+1;j++)
acode->ncumfq[j]=acode->ncumfq[j-1]+IMAX(nfreq[j-1],1);
acode->ncum=acode->ncumfq[acode->nch+2]=acode->ncumfq[acode->nch+1]+1;
}
#undef MC
#undef MAXINT