Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Najkraći C program za računajje broja pi

[es] :: Art of Programming :: Najkraći C program za računajje broja pi
(TOP topic)
Strane: 1 2

[ Pregleda: 17928 | Odgovora: 31 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Nedeljko
Nedeljko Stefanović

Član broj: 314
Poruke: 8171
*.dial.InfoSky.Net



Profil

icon Najkraći C program za računajje broja pi20.04.2004. u 23:43 - pre 4654 dana i 22h
Čisto da se zna.


Na adresi http://numbers.computation.fre...ts/TinyPrograms/tinycodes.html nalaze se najkraći poznati programi na jeziku C za računanje broja pi na veliki broj decimalnih mesta. Takođe, traže da im se obrati svako ko ima kraći kod. Njihov najkraći kod glasi

Code:

long k=4e3,p,a[337],q,t=1e3;
main(j){for(;a[j=q=0]+=2,--k;)
for(p=1+2*k;j<337;q=a[j]*k+q%p*t,a[j++]=q/p)
k!=j>2?:printf("%.3d",a[j-2]%t+q/p/t);}


i ja sam uspeo da ga skratim za jedan znak zamenjujući izraz k!=j>2 izrazom j>2<k koji je sa njim ekvivalentan pod uslovom da k nije manje od 1, a taj uslov je u ovom programu uvek ispunjen, jer se vrednost promenljive k smanjuje od 4000 do 0 za po jedan pri čemu program završava rad kada k postane 0, tako da se izraz k!=j>2 izračunava samo kada je k>=1. No, bez obzira na sve to, kao i na činjenicu da oba koda proizvode isti rezultat (programi su testirani), i pored toga što sam im poslao poboljšani kod, oni se i dalje prave ludi! Tek toliko da se zna.
Nije bitno koji su zaključci izvučeni, već kako se do njih došlo.
 
Odgovor na temu

blaza
n/a

Član broj: 961
Poruke: 743
*.vdial.verat.net



Profil

icon Re: Najkraći C program za računajje broja pi10.07.2004. u 10:43 - pre 4574 dana i 11h
Nedeljko, prevideo si da se
Code:
for(;a[j=q=0]+=2,--k;)
moze zameniti sa
Code:
for(;--k;a[j=q=0]=2)
cime se program skracuje za dodatna dva karaktera. Verujem da postoje i dodatna poboljsanja.
O_o
 
Odgovor na temu

-zombie-
Tomica Jovanovic
freelance programmer
ni.ac.yu

Član broj: 4128
Poruke: 3448
195.252.85.*

Sajt: localhost


Profil

icon Re: Najkraći C program za računajje broja pi13.07.2004. u 01:42 - pre 4571 dana i 20h
nešto slično na http://www1.physik.tu-muenchen...tpack/html/Mathematics/Pi.html

Code:
/* Calculation of pi to 16276 decimal digits */
/* Size of program: 143 characters */
/* After Dik T. Winter, CWI Amsterdam */
int a=1e4,b,c=56980,d,e,f[56980],g,h,i;
main(){for(;b=c,c-=14;i=printf("%04d",e+d/a),e=d%a)
while(g=--b*2)d=h*b+a*(i?f[b]:a/5),h=d/--g,f[b]=d%g;}


i još kraći za e:

Code:
/*paasivir@jyu.fi*/int a[3302],b=3301,*c=a,d,e,f;main(){for(e=b;--e;*c++=1);*c
=2;for(d=2001;d--;printf("%05d",f))for(c=a,e=b;e;f/=e--){f+=*c*1e5;*c++=f%e;}}

 
Odgovor na temu

Nedeljko
Nedeljko Stefanović

Član broj: 314
Poruke: 8171
*.dial.InfoSky.Net



Profil

icon Re: Najkraći C program za računajje broja pi17.08.2004. u 16:27 - pre 4536 dana i 5h
Inače nisam napisao da programi koje sam priložio imaju jednu sitnu anomaliju koja se može pojaviti kod serija od šest i više uzastopnih devetki, ali koja se ne ispoljava među prvih hiljadu decimala. Blažina, kao i moja korekcija nemaju nikakvog uticaja na to. Sve verzije tog koda imaju isti nedostatak. Inače, analizom programa se može utvrditi da je zasnovan na Ojlerovoj transformaciji Lajbnicovig reda (razvoja za arctg u tački 1).
Nije bitno koji su zaključci izvučeni, već kako se do njih došlo.
 
Odgovor na temu

byTer

Član broj: 10936
Poruke: 1221
*.info-net.co.yu

ICQ: 47761626


Profil

icon Re: Najkraći C program za računajje broja pi18.08.2004. u 12:48 - pre 4535 dana i 9h
nije li najkrace 22/7 ?
 
Odgovor na temu

chupcko
Ima
Beograd

Član broj: 5560
Poruke: 1111

Sajt: www.google.com


Profil

icon Re: Najkraći C program za računajje broja pi18.08.2004. u 13:37 - pre 4535 dana i 8h
Puf, eto sale...

greska je samo oko 0.04 % dovoljno za recimo stari egipat, ali ne i za savremeno doba :).

CHUPCKO
 
Odgovor na temu

blaza
n/a

Član broj: 961
Poruke: 743
*.vdial.verat.net



Profil

icon Re: Najkraći C program za računajje broja pi18.08.2004. u 14:35 - pre 4535 dana i 7h
Jedan od kracih progama za izracunavanje broja Pi moze se naci u attachment-u (kompajlirana vezija i sors kod). Program je pisan u x86 asembleru, i izracunava 9300+ tacnih decimala broja Pi. Duzina kompajliranog programa (DOS .COM fajl) iznosi 110 bajtova.
O_o
Prikačeni fajlovi
 
Odgovor na temu

Nedeljko
Nedeljko Stefanović

Član broj: 314
Poruke: 8171
*.dial.InfoSky.Net



Profil

icon Re: Najkraći C program za računajje broja pi18.08.2004. u 17:36 - pre 4535 dana i 4h
Da, samo to nije C program. To rešenje spada u kategoriju asemblerskih rešenja i u njoj je izuzetno optimalno. Svuda gde se prilažu takvi programi, oni se razvrstavaju u zasebne kategorije prema jezicima u kojima su pisani.
Nije bitno koji su zaključci izvučeni, već kako se do njih došlo.
 
Odgovor na temu

blaza
n/a

Član broj: 961
Poruke: 743
*.yu1.net.



Profil

icon Re: Najkraći C program za računajje broja pi26.12.2004. u 18:14 - pre 4405 dana i 3h
What's the big deal?
Dik T. Winter se nije narocito potrudio da skrati kod.
Skratio sam njegov program za 9 znakova (143 -> 134).
Code:
int a=1e4,c=56980,d,e,f[56980],g,h;
main(b){for(;b=c-=14;printf("%04d",e+d/a))for(e=d%a;g=2*--b;h=d/--g,f[b]=d%g)d=h*b+a*(e?f[b]:2e3);}

O_o
 
Odgovor na temu

sallle
Sasa Ninkovic
GTECH
Beograd

Član broj: 146
Poruke: 480
*.etf.bg.ac.yu.

ICQ: 20785904


Profil

icon Re: Najkraći C program za računajje broja pi04.01.2005. u 02:54 - pre 4396 dana i 18h
printf nije sluzbena rec...
 
Odgovor na temu

Nedeljko
Nedeljko Stefanović

Član broj: 314
Poruke: 8171
*.dial.InfoSky.Net.



Profil

icon Re: Najkraći C program za računajje broja pi04.01.2005. u 12:18 - pre 4396 dana i 9h
A ko je tvrdio da je službena? Dobro de, svuda fali jedno #include <stdio.h>
Nije bitno koji su zaključci izvučeni, već kako se do njih došlo.
 
Odgovor na temu

sallle
Sasa Ninkovic
GTECH
Beograd

Član broj: 146
Poruke: 480
*.rcub.bg.ac.yu.

ICQ: 20785904


Profil

icon Re: Najkraći C program za računajje broja pi05.01.2005. u 03:06 - pre 4395 dana i 18h
onda treba optimizovati i taj heder, i izbaciti nepotrebne stvari...
 
Odgovor na temu

s1cK
Bosko Stupar
Beograd

Član broj: 43061
Poruke: 65



Profil

icon Re: Najkraći C program za računajje broja pi24.10.2007. u 21:30 - pre 3373 dana
Citat:
sallle: onda treba optimizovati i taj heder, i izbaciti nepotrebne stvari...

u prevodu , minimalizam C-a ;)
<kow> "There are 10 types of people in the world... those who understand binary and
those who don't."
<SpaceRain> That's only 2 types of people, kow.
<SpaceRain> STUPID
www.bash.org
 
Odgovor na temu

Shadowed
Vojvodina

Član broj: 649
Poruke: 12070



Profil

icon Re: Najkraći C program za računajje broja pi24.10.2007. u 21:48 - pre 3373 dana
Citat:
blaza: What's the big deal?
Dik T. Winter se nije narocito potrudio da skrati kod.
Skratio sam njegov program za 9 znakova (143 -> 134).
Code:
int a=1e4,c=56980,d,e,f[56980],g,h;
main(b){for(;b=c-=14;printf("d",e+d/a))for(e=d%a;g=2*--b;h=d/--g,f[b]=d%g)d=h*b+a*(e?f[b]:2e3);}


Hm, ako se ne varam, na poslednjoj liniji nije potrebno ; na kraju, ako vec ide }. Eto jos jednog znaka ;]
 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4826
*.dynamic.sbb.co.yu.

Jabber: xfiles@elitesecurity.org


Profil

icon Re: Najkraći C program za računajje broja pi24.10.2007. u 22:01 - pre 3373 dana
Citat:

Hm, ako se ne varam, na poslednjoj liniji nije potrebno ; na kraju, ako vec ide }

Mora ;) Pomesao si sa Pascal-om, gde nesto slicno moze...
C/C++ su rigorozni po tom pitanju.
Čak mora i iza prazne "default:" konstrukcije unutar switch, neposredno pre }.

Dalje, u izrazima:
if ( nesto )
x=1;
else
x=2;
... opet mora ; cak i iza x=1, za razliku od Pascala.

EDIT / Off Topic

Jedino se ; ne stavlja iz kraja bloka } sem u posebnim slucajevima (koji doduse i nisu tako retki) kada sintaksa konstrukcije nalaze. Na primer:
class NekaKlasa {};
Ovde treba ; jer moze da postoji i izraz:
class NekaKlasa {} Objekat;
... kojim se odmah kreira i objekat.

To je inace jedna od gresaka koju pocetnici tesko uspevaju da lociraju i otklone, jer se greska obicno prijavi u DRUGOM izvornom fajlu projekta, zbog strukture C/C++ programa (zaglavlje/izvorni kod):

--- fajl.H ---
class Klasa {}
--- fajl.CPP ---
#include "fajl.H"
int i=10;

... gore u H nedostaje ; iza } a greska se obicno javi u CPP fajlu :)



[Ovu poruku je menjao X Files dana 24.10.2007. u 23:26 GMT+1]
 
Odgovor na temu

blaza
n/a

Član broj: 961
Poruke: 743
93.86.122.*



Profil

icon Re: Najkraći C program za računajje broja pi15.01.2009. u 19:44 - pre 2924 dana i 1h
Idemo dalje: 134 -> 127.

Code:
a=1e4,c=56980,d,e,f[56980],g;main(b){for(;b=c-=14;printf("%04d",e+d/a))for(e=d%a;g=2*--b;d+=e?f[b]*a:2e7,f[b]=d%--g,d/=g)d*=b;}


[Ovu poruku je menjao blaza dana 16.01.2009. u 00:18 GMT+1]
O_o
 
Odgovor na temu

blaza
n/a

Član broj: 961
Poruke: 743
93.86.122.*



Profil

icon Re: Najkraći C program za računajje broja pi18.01.2009. u 12:02 - pre 2921 dana i 9h
Ne moze krace?

Moze ;)

Nova skracenja:

123 karaktera, 16275 tacnih decimala
Code:
a=1e4,c=113932,d,e,f[113960];main(g){for(;g=c-=28;printf("%04d",e%a+d/a))for(e=d;g;d/=g--)d*=g--/2,f[g]=d+=e?f[g]%g*a:2e7;}


121 karakter, 9999 tacnih decimala
Code:
a=1e4,c=70028,d,e,f[70000];main(g){for(;g=c-=28;printf("%04d",e%a+d/a))for(e=d;g;d/=g--)d*=g--/2,f[g]=d+=e?f[g]%g*a:2e7;}


119 karaktera, 999 tacnih decimala
Code:
a=1e4,c=7028,d,e,f[7000];main(g){for(;g=c-=28;printf("%04d",e%a+d/a))for(e=d;g;d/=g--)d*=g--/2,f[g]=d+=e?f[g]%g*a:2e7;}



[Ovu poruku je menjao blaza dana 18.01.2009. u 19:41 GMT+1]
O_o
 
Odgovor na temu

Nedeljko
Nedeljko Stefanović

Član broj: 314
Poruke: 8171
212.200.65.*



Profil

icon Re: Najkraći C program za računajje broja pi27.03.2010. u 22:47 - pre 2487 dana i 22h
Citat:
Nedeljko: Inače nisam napisao da programi koje sam priložio imaju jednu sitnu anomaliju koja se može pojaviti kod serija od šest i više uzastopnih devetki, ali koja se ne ispoljava među prvih hiljadu decimala.


Kolega, niste dobro naučili matematiku. Ovde nema nikakve anomalije, program je potpuno čist.

Kod u čitljivijoj varijanti izgleda ovako:

Code:
#include <stdio.h>

int main()
{
    int a[337], t = 1000, k;

    printf("3.");

    for (k = 4000; k > 0; k--) {
        int p = 2*k + 1;
        int q = 0;
        int j;

        a[0] += 2;

        for (j=0; j<337; j++) {
            if (k == 1 && j > 2) {
                printf("%.3d", a[j-2]%t + q/p/t);
            }

            q = a[j]*k + q%p*t;
            a[j] = q/p;
        }
    }

    printf("\n");

    return 0;
}

Nije bitno koji su zaključci izvučeni, već kako se do njih došlo.
 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4826
212.200.65.*

Jabber: xfiles@elitesecurity.org


Profil

icon Re: Najkraći C program za računajje broja pi28.03.2010. u 09:00 - pre 2487 dana i 13h
^
Je l' to kolega Nedeljko pre i posle spavanja? ;)

 
Odgovor na temu

Nedeljko
Nedeljko Stefanović

Član broj: 314
Poruke: 8171
212.200.65.*



Profil

icon Re: Najkraći C program za računajje broja pi29.03.2010. u 09:17 - pre 2486 dana i 13h
Citat:
Nedeljko: Kolega, niste dobro naučili matematiku. Ovde nema nikakve anomalije, program je potpuno čist.


Kolega, Vi niste dobro naučili matematiku! Program ima anomaliju o kojoj ću nešto napisati kasnije.
Nije bitno koji su zaključci izvučeni, već kako se do njih došlo.
 
Odgovor na temu

[es] :: Art of Programming :: Najkraći C program za računajje broja pi
(TOP topic)
Strane: 1 2

[ Pregleda: 17928 | Odgovora: 31 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.