Artifact c84557937c171eb7b70674fbd8f803ec45498f57ebc6a36062f9f801bde18e5d:
- Executable file
r36/xlog/ROUNDED.LOG
— part of check-in
[f2fda60abd]
at
2011-09-02 18:13:33
on branch master
— Some historical releases purely for archival purposes
git-svn-id: https://svn.code.sf.net/p/reduce-algebra/code/trunk/historical@1375 2bfe0521-f11c-4a00-b80e-6202646ff360 (user: arthurcnorman@users.sourceforge.net, size: 2891) [annotate] [blame] [check-ins using] [more...]
REDUCE 3.6, 15-Jul-95, patched to 6 Mar 96 ... % Tests in the exact mode. x := 1/2; 1 x := --- 2 y := x + 0.7; 6 y := --- 5 % Tests in approximate mode. on rounded; y; 1.2 % as expected not converted to approximate form. z := y+1.2; z := 2.4 z/3; 0.8 % Let's raise this to a high power. ws^24; 0.00472236648287 % Now a high exponent value. % 10.2^821; % Elementary function evaluation. cos(pi); - 1 symbolic ws; (!*sq ((!:rd!: . -1.0) . 1) t) z := sin(pi); z := 1.22460635382e-16 symbolic ws; (!*sq ((!:rd!: . 1.2246063538224e-016) . 1) t) % Handling very small quantities. % With normal defaults, underflows are converted to 0. exp(-100000.1**2); 0 % However, if you really want that small number, roundbf can be used. on roundbf; exp(-100000.1**2); 1.18441281937e-4342953505 off roundbf; % Now let us evaluate pi. pi; 3.14159265359 % Let us try a higher precision. precision 50; 12 pi; 3.1415926535897932384626433832795028841971693993751 % Now find the cosine of pi/6. cos(ws/6); 0.86602540378443864676372317075293618347140262690519 % This should be the sqrt(3)/2. ws**2; 0.75 %Here are some well known examples which show the power of this system. precision 10; 50 % This should give the usual default again. let xx=e**(pi*sqrt(163)); let yy=1-2*cos((6*log(2)+log(10005))/sqrt(163)); % First notice that xx looks like an integer. xx; 2.625374126e+17 % and that yy looks like zero. yy; 0 % but of course it's an illusion. precision 50; 10 xx; 2.6253741264076874399999999999925007259719818568888e+17 yy; - 1.2815256559456092775159749532170513334408547400481e-16 %now let's look at an unusual way of finding an old friend; precision 50; 50 procedure agm; <<a := 1$ b := 1/sqrt 2$ u:= 1/4$ x := 1$ pn := 4$ repeat <<p := pn; y := a; a := (a+b)/2; b := sqrt(y*b); % Arith-geom mean. u := u-x*(a-y)**2; x := 2*x; pn := a**2/u; write "pn=",pn>> until pn>=p; p>>; agm let ag=agm(); ag; pn=3.1876726427121086272019299705253692326510535718594 pn=3.1416802932976532939180704245600093827957194388154 pn=3.1415926538954464960029147588180434861088792372613 pn=3.1415926535897932384663606027066313217577024113424 pn=3.1415926535897932384626433832795028841971699491647 pn=3.1415926535897932384626433832795028841971693993751 pn=3.1415926535897932384626433832795028841971693993751 3.1415926535897932384626433832795028841971693993751 % The limit is obviously. pi; 3.1415926535897932384626433832795028841971693993751 end; (TIME: rounded 190 190)