DEMO.DESIGN
Frequently Asked Questions
 
оглавление | demo party в ex-СССР | infused bytes e-mag | новости от ib/news | другие проекты | письмо | win koi lat

следующий фpагмент (2)
- [42] Various nice sources (2:5030/84) ------------------------- NICE.SOURCES - Msg : 4 of 8 From : Victor Gorelik 2:5020/272.57 11 Jan 96 20:29:00 To : Vladimir Schipunov Subj : Число e -------------------------------------------------------------------------------- Привет, Vladimir! VS> А про PI у кого-нибудь есть? VS> Мне попадалась хорошая реализация на Си, да вот потерял. Хорошая реализация говоришь? Желаю тебе получить немало удовольствия, в процессе понимания того, как эта программа работает: === Cut === #include <stdio.h> #define n 100 #define base 10L #define len (10*n/3) void main() { long i,j,k,q,x,nines,predigit,a[len+1]; for (j=1;j<=len;j++) a[j] = 2; nines = 0; predigit = 0; for (j=1;j<=n;j++) { q = 0; for (i=len;i>0;i--) { x = base*a[i]+q*i; a[i] = x % (2*i-1); q = x/(2*i-1); } a[1]=q % base; q = q/base; if (q==base-1) nines++; else { if (q==base) { printf("%01ld",predigit+1); for (k=1;k<=nines;k++) printf("0"); nines = 0; predigit = 0; } else { if (j>0) printf("%01ld",predigit); predigit = q; if (nines!=0) { for (k=1;k<=nines;k++) printf("%ld",base-1); nines = 0; } } } } fflush(stdout); } === Cut === ЗЫ Автор этой гениальной программы - некий Стенли Рабинович. ЗЗЫ Работает она, кстати говоря, довольно медленно. C уважением, Victor
следующий фpагмент (3)|пpедыдущий фpагмент (1)
- [36] Various nice sources (2:5030/84) ------------------------- NICE.SOURCES - Msg : 1 of 2 From : Maxim Shemanaryov 2:5015/18.7 03 Mar 95 17:43:00 To : Ilya Kozachenko Subj : Re: О числе е -------------------------------------------------------------------------------- Hello Ilya! Sunday February 26 1995 09:44, Ilya Kozachenko wrote to All: IK> А нет ли у кого такой же для вычисления числа "пи" ? есть, не помню, от кого. /* Вот в FAQ из sci.math попалась замечательная пpогpаммуля, котоpая за несколько секунд вычисляет 800 знаков числа Пи. Во всяком случае пеpвые знаки 3.1415926535897932 пpавильные, точнее эталона не я не нашел. Было указано, что ее можно легко модифициpовать на большее число знаков (не знаю как :(). К сожалению, в статье фоpмула была написана в нотации pедактоpа AmsTeX, без бутылки в ней не pазобpаться. Скажу только, что исходит она из теоpии комплексного умножения эллиптических кpивых (Вы поняли ? я нет). */ long d; int b=0,a=10000,c=2800,g,e,f[2801]; main() { for(;b-c;) f[b++]=a/5; for(; d=0,g=c*2; c-=14,printf("%.4d",e+d/a),e=d%a) { for(b=c; d+=f[b]*(long)a, f[b]=d%--g,d/=g--,--b; d*=b); } } С уважением McSeem
следующий фpагмент (4)|пpедыдущий фpагмент (2)
- [2] International C echo (2:5030/84) -------------------------------- C_ECHO - Msg : 236 of 387 From : Oscar Chang 1:143/114 04 Aug 93 02:01:00 To : Michael Stapleton Subj : Pi 1/2 -------------------------------------------------------------------------------- MS> Anyone know what the current known precision of Pi is ? Or any cute MS>algorithms for this madness? Unlimited precision floating point! Sheesh! The one from snippets: /* ** PI.C - Computes Pi to an arbitrary number of digits ** ** Uses far arrays so may be compiled in any memory model */ #include<stdio.h> #include<stdlib.h> #if defined(__ZTC__) #include <dos.h> #define FAR _far #define Fcalloc farcalloc #define Ffree farfree #define Size_T unsigned long #elif defined(__TURBOC__) #include <alloc.h> #define FAR far #define Fcalloc farcalloc #define Ffree farfree #define Size_T unsigned long #else /* assume MSC/QC */ #include <malloc.h> #define FAR _far #define Fcalloc _fcalloc #define Ffree _ffree #define Size_T size_t #endif long kf, ks; long FAR *mf, FAR *ms; long cnt, n, temp, nd; long i; long col, col1; long loc, stor[21]; void shift(long FAR *l1, long FAR *l2, long lp, long lmod) { long k; k = ((*l2) > 0 ? (*l2) / lmod: -(-(*l2) / lmod) - 1); *l2 -= k * lmod; *l1 += k * lp; } void yprint(long m) { if (cnt<n) { if (++col == 11) { col = 1; if (++col1 == 6) { col1 = 0; printf("\n"); printf("%4ld",m%10); } else printf("%3ld",m%10); } else printf("%ld",m); cnt++; } } void xprint(long m) { long ii, wk, wk1; if (m < 8) { for (ii = 1; ii <= loc; ) yprint(stor[(int)(ii++)]); loc = 0; } else { if (m > 9) { wk = m / 10; m %= 10; for (wk1 = loc; wk1 >= 1; wk1--) { wk += stor[(int)wk1]; stor[(int)wk1] = wk % 10; wk /= 10; } } } stor[(int)(++loc)] = m; } void memerr(int errno) { printf("\a\nOut of memory error #%d\n", errno); if (2 == errno) Ffree(mf); _exit(2); } int main(int argc, char *argv[]) { int i=0; char *endp; stor[i++] = 0; if (argc < 2) { puts("\aUsage: PI <number_of_digits>"); return(1); } n = strtol(argv[1], &endp, 10); if (NULL == (mf = Fcalloc((Size_T)(n + 3L), (Size_T)sizeof(long)))) memerr(1); if (NULL == (ms = Fcalloc((Size_T)(n + 3L), (Size_T)sizeof(long)))) memerr(2); printf("\nApproximation of PI to %ld digits\n", (long)n); cnt = 0; kf = 25; ks = 57121L; mf[1] = 1L; for (i = 2; i <= (int)n; i += 2) { mf[i] = -16L; mf[i+1] = 16L; } for (i = 1; i <= (int)n; i += 2) { ms[i] = -4L; ms[i+1] = 4L; } printf("\n 3."); >>> Continued to next message * SLMR 2.1a * We can't go back, and we can't stay here. -- Picard
следующий фpагмент (5)|пpедыдущий фpагмент (3)
- [2] International C echo (2:5030/84) -------------------------------- C_ECHO - Msg : 237 of 387 From : Oscar Chang 1:143/114 04 Aug 93 02:01:00 To : Michael Stapleton Subj : Pi 2/2 -------------------------------------------------------------------------------- .MSGID: 1:143/114 858863AD >>> Continued from previous message while (cnt < n) { for (i = 0; ++i <= (int)n - (int)cnt; ) { mf[i] *= 10L; ms[i] *= 10L; } for (i =(int)(n - cnt + 1); --i >= 2; ) { temp = 2 * i - 1; shift(&mf[i - 1], &mf[i], temp - 2, temp * kf); shift(&ms[i - 1], &ms[i], temp - 2, temp * ks); } nd = 0; shift((long FAR *)&nd, &mf[1], 1L, 5L); shift((long FAR *)&nd, &ms[1], 1L, 239L); xprint(nd); } printf("\n\nCalculations Completed!\n"); Ffree(ms); Ffree(mf); return(0); } * SLMR 2.1a * We can't go back, and we can't stay here. -- Picard

Всего 4 фpагмент(а/ов) |пpедыдущий фpагмент (4)

Если вы хотите дополнить FAQ - пожалуйста пишите.

design/collection/some content by Frog,
DEMO DESIGN FAQ (C) Realm Of Illusion 1994-2000,
При перепечатке материалов этой страницы пожалуйста ссылайтесь на источник: "DEMO.DESIGN FAQ, http://www.enlight.ru/demo/faq".