add numerical recipes library

This commit is contained in:
2025-09-12 18:55:25 +09:00
parent d4dff245bd
commit 2c75620ec9
1344 changed files with 63869 additions and 0 deletions

View File

@@ -0,0 +1,76 @@
#include <stdio.h>
#define NRANSI
#include "nrutil.h"
#define IAOFF 48
void mppi(int n)
{
void mp2dfr(unsigned char a[], unsigned char s[], int n, int *m);
void mpadd(unsigned char w[], unsigned char u[], unsigned char v[], int n);
void mpinv(unsigned char u[], unsigned char v[], int n, int m);
void mplsh(unsigned char u[], int n);
void mpmov(unsigned char u[], unsigned char v[], int n);
void mpmul(unsigned char w[], unsigned char u[], unsigned char v[], int n,
int m);
void mpsdv(unsigned char w[], unsigned char u[], int n, int iv, int *ir);
void mpsqrt(unsigned char w[], unsigned char u[], unsigned char v[], int n,
int m);
int ir,j,m;
unsigned char mm,*x,*y,*sx,*sxi,*t,*s,*pi;
x=cvector(1,n+1);
y=cvector(1,n<<1);
sx=cvector(1,n);
sxi=cvector(1,n);
t=cvector(1,n<<1);
s=cvector(1,3*n);
pi=cvector(1,n+1);
t[1]=2;
for (j=2;j<=n;j++) t[j]=0;
mpsqrt(x,x,t,n,n);
mpadd(pi,t,x,n);
mplsh(pi,n);
mpsqrt(sx,sxi,x,n,n);
mpmov(y,sx,n);
for (;;) {
mpadd(x,sx,sxi,n);
mpsdv(x,&x[1],n,2,&ir);
mpsqrt(sx,sxi,x,n,n);
mpmul(t,y,sx,n,n);
mpadd(&t[1],&t[1],sxi,n);
x[1]++;
y[1]++;
mpinv(s,y,n,n);
mpmul(y,&t[2],s,n,n);
mplsh(y,n);
mpmul(t,x,s,n,n);
mm=t[2]-1;
for (j=3;j<=n;j++) {
if (t[j] != mm) break;
}
m=t[n+1]-mm;
if (j <= n || m > 1 || m < -1) {
mpmul(s,pi,&t[1],n,n);
mpmov(pi,&s[1],n);
continue;
}
printf("pi=\n");
s[1]=pi[1]+IAOFF;
s[2]='.';
m=mm;
mp2dfr(&pi[1],&s[2],n-1,&m);
s[m+3]=0;
printf(" %64s\n",&s[1]);
free_cvector(pi,1,n+1);
free_cvector(s,1,3*n);
free_cvector(t,1,n<<1);
free_cvector(sxi,1,n);
free_cvector(sx,1,n);
free_cvector(y,1,n<<1);
free_cvector(x,1,n+1);
return;
}
}
#undef IAOFF
#undef NRANSI