#include <stdio.h>
typedef unsigned int Uint;
#define N 100
#define DP 15
//RADIX == 10^LOG
#define LOG 1
#define RADIX 10
typedef Uint Liczba[N+1];
void pisz( Liczba a ){ Uint i;
for( i
=1; i
<=DP
&& !a
[i
]; i
++ ) printf("%*s", LOG
,""); for( i
++; i
<=DP
; i
++ ) printf("%0*u", LOG
, a
[i
]); for( ; i
<=N
; i
++ ) printf("%0*u", LOG
, a
[i
]); }
void plus( Liczba a, Liczba b){ // a[]:=a[]+b[]
for( Uint c=0, i=N; i>0; i-- ){
c += a[i]+b[i];
a[i] = c % RADIX;
c /= RADIX;}}
void minus( Liczba a, Liczba b ) { // a[]:=a[]-b[]
for( Uint c=0, i=N; i>0; i-- ){
c += b[i];
if( a[i]<c ){
a[i] = RADIX + a[i] - c; c=1; }
else {
a[i] -= c; c=0; }}}
void razyU( Liczba a, Uint b ) { // a[]:=a[] * b
for( Uint c=0,i=N; i>0; i-- ){
c += a[i]*b;
a[i]= c % RADIX;
c /= RADIX; }}
int podzielU( Liczba a, Uint b ) { // a[]:=a[] / b
Uint z=0;
for( Uint c=0, i=1; i<=N; i++ ) {
c = c*RADIX+a[i];
a[i]= c/b % RADIX; if( a[i] ) z=1;
c = c - a[i]*b;}
return z;}
void wstawU( Liczba a, Uint b ) { // a[]:= b
Uint i;
for( i=0; i<=N; i++ ) a[i]=0;
i=DP;
while( b ) {
a[i--] = b%RADIX; b /= RADIX; }}
void atg( Liczba a, Uint x ) { // a[]:= atan( 1/x )
Liczba w; Uint z, n=3;
wstawU( w, 1 ); wstawU( a, 0 ); podzielU(w, x);
do {
x *= x*x; z=podzielU( w, x*n ); n += 2;minus( a, w );
x *= x*x; z=podzielU( w, x*n ); n += 2; plus( a, w );
} while( z );}
int main(void) {
Liczba a;
wstawU(a, 12);
razyU
(a
, 125); pisz
(a
); puts(""); podzielU
(a
, 77); pisz
(a
); puts(""); atg
(a
, 5);pisz
(a
); puts(""); printf("\n%0.14f\n", 12.0*125/77.0); return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+Cgp0eXBlZGVmIHVuc2lnbmVkIGludCBVaW50OwojZGVmaW5lIE4gMTAwCiNkZWZpbmUgRFAgMTUKLy9SQURJWCA9PSAxMF5MT0cKI2RlZmluZSBMT0cgMQojZGVmaW5lIFJBRElYIDEwCnR5cGVkZWYgVWludCBMaWN6YmFbTisxXTsKIAp2b2lkIHBpc3ooIExpY3piYSBhICl7IFVpbnQgaTsKCWZvciggaT0xOyBpPD1EUCAmJiAhYVtpXTsgaSsrICkgcHJpbnRmKCIlKnMiLCBMT0csIiIpOwoJcHJpbnRmKCIlKnUiLCBMT0csIGFbaV0pOwoJZm9yKCBpKys7IGk8PURQOyBpKysgKSBwcmludGYoIiUwKnUiLCBMT0csIGFbaV0pOwoJcHV0Y2hhcignLicpOwoJZm9yKCAgICA7IGk8PU47IGkrKyApIHByaW50ZigiJTAqdSIsIExPRywgYVtpXSk7IH0KCQkKdm9pZCBwbHVzKCBMaWN6YmEgYSwgTGljemJhIGIpeyAgICAgICAgICAgICAgICAgIC8vIGFbXTo9YVtdK2JbXQoJZm9yKCBVaW50IGM9MCwgaT1OOyBpPjA7IGktLSApewoJCWMgKz0gYVtpXStiW2ldOwoJCWFbaV0gPSBjICUgUkFESVg7CgkJYyAvPSBSQURJWDt9fQoKdm9pZCBtaW51cyggTGljemJhIGEsIExpY3piYSBiICkgeyAgICAgICAgICAgICAgIC8vIGFbXTo9YVtdLWJbXQoJZm9yKCBVaW50IGM9MCwgaT1OOyBpPjA7IGktLSApewoJCWMgKz0gYltpXTsKCQlpZiggYVtpXTxjICl7CgkJCWFbaV0gPSBSQURJWCArIGFbaV0gLSBjOyBjPTE7IH0KCQllbHNlIHsKCQkJYVtpXSAtPSBjOyBjPTA7IH19fQoKdm9pZCByYXp5VSggTGljemJhIGEsIFVpbnQgYiApIHsgICAgICAgICAgICAgICAgIC8vIGFbXTo9YVtdICogYgoJZm9yKCBVaW50IGM9MCxpPU47IGk+MDsgaS0tICl7CgkJYyArPSBhW2ldKmI7CgkJYVtpXT0gYyAlIFJBRElYOwoJCWMgLz0gUkFESVg7IH19CgppbnQgcG9kemllbFUoIExpY3piYSBhLCBVaW50IGIgKSB7ICAgICAgICAgICAgICAvLyBhW106PWFbXSAvIGIKCVVpbnQgej0wOwoJZm9yKCBVaW50IGM9MCwgaT0xOyBpPD1OOyBpKysgKSB7CgkJYyA9IGMqUkFESVgrYVtpXTsKCQlhW2ldPSBjL2IgJSBSQURJWDsgaWYoIGFbaV0gKSB6PTE7CgkJYyA9IGMgLSBhW2ldKmI7fQoJcmV0dXJuIHo7fQoKdm9pZCB3c3Rhd1UoIExpY3piYSBhLCBVaW50IGIgKSB7ICAgICAgICAgICAgICAgIC8vIGFbXTo9IGIKCVVpbnQgaTsKCWZvciggaT0wOyBpPD1OOyBpKysgKSBhW2ldPTA7CglpPURQOwoJd2hpbGUoIGIgKSB7CgkJYVtpLS1dID0gYiVSQURJWDsgYiAvPSBSQURJWDsgfX0KCnZvaWQgYXRnKCBMaWN6YmEgYSwgVWludCB4ICkgeyAgICAgICAgICAgICAgICAgIC8vIGFbXTo9IGF0YW4oIDEveCApCglMaWN6YmEgdzsgVWludCB6LCBuPTM7Cgl3c3Rhd1UoIHcsIDEgKTsgd3N0YXdVKCBhLCAwICk7IHBvZHppZWxVKHcsIHgpOwoJZG8gewoJCXggKj0geCp4OyB6PXBvZHppZWxVKCB3LCB4Km4gKTsgbiArPSAyO21pbnVzKCBhLCB3ICk7CgkJeCAqPSB4Kng7IHo9cG9kemllbFUoIHcsIHgqbiApOyBuICs9IDI7IHBsdXMoIGEsIHcgKTsKCQlwaXN6KHcpOyBwdXRzKCIiKTsKCX0gd2hpbGUoIHogKTt9CQoKaW50IG1haW4odm9pZCkgewoJTGljemJhIGE7Cgl3c3Rhd1UoYSwgMTIpOyAKCXJhenlVKGEsIDEyNSk7IHBpc3ooYSk7IHB1dHMoIiIpOwoJcG9kemllbFUoYSwgNzcpOyBwaXN6KGEpOyBwdXRzKCIiKTsKCWF0ZyhhLCA1KTtwaXN6KGEpOyBwdXRzKCIiKTsKCXByaW50ZigiXG4lMC4xNGZcbiIsIDEyLjAqMTI1Lzc3LjApOwoJcmV0dXJuIDA7Cn0K