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: 11650 | Odgovora: 25 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Nedeljko
Nedeljko Stefanović
Beograd

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



Profil

icon Najkraći C program za računajje broja pi20.04.2004. u 23:43

Č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.
Pishi kao shto govorish, a chitaj kao shto je napisano.
20.04.2004. u 23:43 

blaza

Č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
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
10.07.2004. u 10:43 

-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
Laptopovi

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;}}

13.07.2004. u 01:42 

Nedeljko
Nedeljko Stefanović
Beograd

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



Profil

icon Re: Najkraći C program za računajje broja pi17.08.2004. u 16:27
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).
Pishi kao shto govorish, a chitaj kao shto je napisano.
17.08.2004. u 16:27 

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
nije li najkrace 22/7 ?
18.08.2004. u 12:48 

chupcko
Beograd

Član broj: 5560
Poruke: 1107
*.mobtel.co.yu

Sajt: www.google.com


Profil

icon Re: Najkraći C program za računajje broja pi18.08.2004. u 13:37
Puf, eto sale...

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

CHUPCKO
18.08.2004. u 13:37 

blaza

Č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
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
18.08.2004. u 14:35 

Nedeljko
Nedeljko Stefanović
Beograd

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



Profil

icon Re: Najkraći C program za računajje broja pi18.08.2004. u 17:36
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.
Pishi kao shto govorish, a chitaj kao shto je napisano.
18.08.2004. u 17:36 

blaza

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



Profil

icon Re: Najkraći C program za računajje broja pi26.12.2004. u 18:14
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
26.12.2004. u 18:14 

sallle
Sasa Ninkovic
Beograd

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

ICQ: 20785904


Profil

icon Re: Najkraći C program za računajje broja pi04.01.2005. u 02:54
printf nije sluzbena rec...
04.01.2005. u 02:54 

Nedeljko
Nedeljko Stefanović
Beograd

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



Profil

icon Re: Najkraći C program za računajje broja pi04.01.2005. u 12:18
A ko je tvrdio da je službena? Dobro de, svuda fali jedno #include <stdio.h>
Pishi kao shto govorish, a chitaj kao shto je napisano.
04.01.2005. u 12:18 

sallle
Sasa Ninkovic
Beograd

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

ICQ: 20785904


Profil

icon Re: Najkraći C program za računajje broja pi05.01.2005. u 03:06
onda treba optimizovati i taj heder, i izbaciti nepotrebne stvari...
05.01.2005. u 03:06 

s1cK
Bosko Stupar
Beograd

Član broj: 43061
Poruke: 58
*.adsl.beotel.net.



Profil

icon Re: Najkraći C program za računajje broja pi24.10.2007. u 21:30
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
24.10.2007. u 21:30 

Shadowed
.NET developer

Administrator
Član broj: 649
Poruke: 10607
212.200.70.*



Profil

icon Re: Najkraći C program za računajje broja pi24.10.2007. u 21:48
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 ;]
Against stupidity the gods themselves contend in vain
24.10.2007. u 21:48 

X Files
Vladimir Stefanovic
Pozarevac

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

Jabber: xfiles@elitesecurity.org
Sajt: www.antivari.com


Profil

icon Re: Najkraći C program za računajje broja pi24.10.2007. u 22:01
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]
FREEWARE
Di rečnik, v1.0.058 (srp-eng/eng-srp priručni rečnik)
http://www.antivari.com
24.10.2007. u 22:01 

blaza

Č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
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
15.01.2009. u 19:44 

blaza

Č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
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
18.01.2009. u 12:02 

Nedeljko
Nedeljko Stefanović
Beograd

Član broj: 314
Poruke: 5628
212.200.65.*



Profil

icon Re: Najkraći C program za računajje broja pi27.03.2010. u 22:47
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;
}

Pishi kao shto govorish, a chitaj kao shto je napisano.
27.03.2010. u 22:47 

X Files
Vladimir Stefanovic
Pozarevac

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

Jabber: xfiles@elitesecurity.org
Sajt: www.antivari.com


Profil

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


FREEWARE
Di rečnik, v1.0.058 (srp-eng/eng-srp priručni rečnik)
http://www.antivari.com
28.03.2010. u 09:00 

Nedeljko
Nedeljko Stefanović
Beograd

Član broj: 314
Poruke: 5628
212.200.65.*



Profil

icon Re: Najkraći C program za računajje broja pi29.03.2010. u 09:17
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.
Pishi kao shto govorish, a chitaj kao shto je napisano.
29.03.2010. u 09:17 

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

[ Pregleda: 11650 | Odgovora: 25 ] > FB > Twit

Postavi temu Odgovori

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