diff options
author | Karl Berry <karl@freefriends.org> | 2008-01-25 17:21:21 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2008-01-25 17:21:21 +0000 |
commit | 50d534d949a2c3084b813253b8c2c781bcc94726 (patch) | |
tree | 539cee3c1206e63f754751d68cf2c7e09a67343f /Master/texmf-dist | |
parent | 8e193852eacac9286f16b0cad43a0d2b3ed2b188 (diff) |
rm realcalc, nosell license
git-svn-id: svn://tug.org/texlive/trunk@6415 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist')
-rw-r--r-- | Master/texmf-dist/doc/generic/realcalc/realdemo.tex | 6 | ||||
-rw-r--r-- | Master/texmf-dist/doc/generic/realcalc/realtest.tex | 291 | ||||
-rw-r--r-- | Master/texmf-dist/source/generic/realcalc/readme | 39 | ||||
-rw-r--r-- | Master/texmf-dist/tex/generic/realcalc/realcalc.tex | 581 |
4 files changed, 0 insertions, 917 deletions
diff --git a/Master/texmf-dist/doc/generic/realcalc/realdemo.tex b/Master/texmf-dist/doc/generic/realcalc/realdemo.tex deleted file mode 100644 index fb4022cca17..00000000000 --- a/Master/texmf-dist/doc/generic/realcalc/realdemo.tex +++ /dev/null @@ -1,6 +0,0 @@ -\documentstyle[]{article} -\input{realcalc} -\begin{document} -\input{realtest} -\test -\end{document} diff --git a/Master/texmf-dist/doc/generic/realcalc/realtest.tex b/Master/texmf-dist/doc/generic/realcalc/realtest.tex deleted file mode 100644 index 7b3a95ef456..00000000000 --- a/Master/texmf-dist/doc/generic/realcalc/realtest.tex +++ /dev/null @@ -1,291 +0,0 @@ -% realcalc.tex -% -% (C) Frank Buchholz, Jan. 1993 -% e-mail: buchholz@lusty.informatik.uni-dortmund.de -%% -%% Type \test\bye -%% - -\input realcalc - -% Test - -\catcode`@=11 - -\def\traceon{% - \tracingonline \@ne - \tracincommands \tw@ - \tracingstats \tw@ - \tracingpages \@ne - \tracingoutput \@ne - \tracinglostchars \@ne - \tracingmacros \tw@ - \tracingparagraphs \@ne - \tracingrestores \@ne - \showboxbreadth \maxdimen - \showboxdepth \maxdimen -} - -\def\traceoff{% - \tracingonline \@zero - \tracingcommands \@zero - \tracingstats \@zero - \tracingpages \@zero - \tracingoutput \@zero - \tracinglostchars \@zero - \tracingmacros \@zero - \tracingparagraphs \@zero - \tracingrestores \@zero - \showboxbreadth \maxdimen - \showboxdepth \maxdimen -} - -\errorstopmode - -\let\sl=\showlists -\let\st=\showthe -\let\s=\show -\def\e{\par \vfill \supereject} - -\def\test{% - \message{Test REALCALC.TEX \@Rversion:} - Test REALCALC.TEX \@Rversion\par\medskip - \testadd\medskip - \testsub\medskip - \testmul\medskip - \testdiv\medskip - \testneg\medskip - \testtrunc\medskip - \testifle\medskip - \testifeq\medskip - \testifgt\medskip - \testifneg\medskip - \testifzero\medskip - \testifpos\medskip - \testifint\medskip -} - -\def\testadd{% - \message{Radd} - Test: Radd\par - \def\a{1234.5678} - \def\b{4321.8765} - \Radd\r{123456789.987654321}{4321.123456789} - \r={123461111.111111110}\par - \Radd\r\a\b \r={5556.4443}\par - \Radd\r{-\a}\b \r={3087.3087}\par - \Radd\r\a{-\b} \r={-3087.3087}\par - \Radd\r{-\a}{-\b} \r={-5556.4443}\par -} - -\def\testsub{% - \message{Rsub} - Test: Rsub\par - \def\a{1234.5678} - \def\b{4321.8765} - \Rsub\r\a{-\b} \r={5556.4443}\par - \Rsub\r{-\a}{-\b} \r={3087.3087}\par - \Rsub\r\a\b \r={-3087.3087}\par - \Rsub\r{-\a}\b \r={-5556.4443}\par -} - -\def\testmul{% - \message{Rmul} - Test: Rmul\par - \def\a{1234} - \def\b{4321} - \Rmul\r{\a}{\b} \Rtrunc\r0\r \r={5332114}\par - \Rmul\r{-\a}{\b} \Rtrunc\r0\r \r={-5332114}\par - \Rmul\r{\a}{-\b} \Rtrunc\r0\r \r={-5332114}\par - \Rmul\r{-\a}{-\b} \Rtrunc\r0\r \r={5332114}\par - \Rmul\r\a0 \Rtrunc\r0\r \r={0}\par - \Rmul\r0\a \Rtrunc\r0\r \r={0}\par - \Rmul\r00 \Rtrunc\r0\r \r={0}\par - \Rmul\r\a1 \Rtrunc\r0\r \r={\a}\par - \Rmul\r1\a \Rtrunc\r0\r \r={\a}\par - \Rmul\r11 \Rtrunc\r0\r \r={1}\par - \Rmul\r\a{-1} \Rtrunc\r0\r \r={-\a}\par - \Rmul\r{-1}\a \Rtrunc\r0\r \r={-\a}\par - \Rmul\r{-1}{-1} \Rtrunc\r0\r \r={1}\par - - \Rmul\r{46340.123456789}{10.123456789}\r={469122.2374}\par - \Rmul\r{46340.123456789}{1}\r={46340.123456789}\par - \Rmul\r{46340.123456789}{100}\r={4634012.3456789}\par - \Rmul\r{0.5}{0.5} \r={0.25}\par - \Rmul\r\r\r \r={0.0625}\par - \Rmul\r\r\r \r={0.00390625}\par - \Rmul\r\r\r \r={0.000015258}\par - \Rmul\r\r\r \r={0}\par - \Rmul\r{1.6}{1.6} \r={2.56}\par - \Rmul\r\r\r \r={6.5536}\par - \Rmul\r\r\r \r={42.94967296}\par - \Rmul\r\r\r \r={1844.674407}\par - \Rmul\r\r\r \r={3402823.669}\par -} - -\def\testdiv{% - \message{Rdiv} - Test: Rdiv\par - not ready\par -} - -\def\testneg{% - \message{Rneg} - Test: Rneg\par - -\ 0 = \Rneg\r{0}\r\par - -\ -1 = \Rneg\r{-1}\r\par - -\ 1 = \Rneg\r{1}\r\par - -\ 0.5 = \Rneg\r{0.5}\r\par - -\ -0.5 = \Rneg\r{-0.5}\r\par - -\ -1234.5678 = \Rneg\r{-1234.5678}\r\par - -\ 1234.5678 = \Rneg\r{1234.5678}\r\par -} - -\def\testtrunc{% - \message{Rtrunc} - Test: Rtrunc\par - \def\a{12345.123456789012345} - 0:\ \Rtrunc\r0\a\r\ \Rtrunc\r00\r\par - 1:\ \Rtrunc\r1\a\r\ \Rtrunc\r10\r\par - 2:\ \Rtrunc\r2\a\r\ \Rtrunc\r20\r\par - 3:\ \Rtrunc\r3\a\r\ \Rtrunc\r30\r\par - 4:\ \Rtrunc\r4\a\r\ \Rtrunc\r40\r\par - 5:\ \Rtrunc\r5\a\r\ \Rtrunc\r50\r\par - 6:\ \Rtrunc\r6\a\r\ \Rtrunc\r60\r\par - 7:\ \Rtrunc\r7\a\r\ \Rtrunc\r70\r\par - 8:\ \Rtrunc\r8\a\r\ \Rtrunc\r80\r\par - 9:\ \Rtrunc\r9\a\r\ \Rtrunc\r90\r\par -} - -\def\testifle{% - \message{Rifle} - Test: Rifle\par - 0 $<$ 0 \Rifle{0}{0} fehler\else ok\fi\par - 0 $<$ 1 \Rifle{0}{1} ok\else fehler\fi\par - 1 $<$ 0 \Rifle{1}{0} fehler\else ok\fi\par - 1 $<$ 1 \Rifle{1}{1} fehler\else ok\fi\par - 1 $<$ 2 \Rifle{1}{2} ok\else fehler\fi\par - 2 $<$ 1 \Rifle{2}{1} fehler\else ok\fi\par - 0 $<$ -1 \Rifle{0}{-1} fehler\else ok\fi\par - -1 $<$ 0 \Rifle{-1}{0} ok\else fehler\fi\par - -1 $<$ -1 \Rifle{-1}{-1} fehler\else ok\fi\par - -1 $<$ -2 \Rifle{-1}{-2} fehler\else ok\fi\par - -2 $<$ -1 \Rifle{-2}{-1} ok\else fehler\fi\par - - 1 $<$ 1.2 \Rifle{1}{1.2} ok\else fehler\fi\par - 1.2 $<$ 1 \Rifle{1.2}{1} fehler\else ok\fi\par - -1 $<$ -1.2 \Rifle{-1}{-1.2} fehler\else ok\fi\par - -1.2 $<$ -1 \Rifle{-1.2}{-1} ok\else fehler\fi\par - - 0.1 $<$ 0.1 \Rifle{0.1}{0.1} fehler\else ok\fi\par - 0.1 $<$ 0.2 \Rifle{0.1}{0.2} ok\else fehler\fi\par - 0.2 $<$ 0.1 \Rifle{0.2}{0.1} fehler\else ok\fi\par - -0.1 $<$ -0.2 \Rifle{-0.1}{-0.2} fehler\else ok\fi\par - -0.1 $<$ -0.1 \Rifle{-0.1}{-0.1} fehler\else ok\fi\par - -0.2 $<$ -0.1 \Rifle{-0.2}{-0.1} ok\else fehler\fi\par -} - -\def\testifeq{% - \message{Rifeq} - Test: Rifeq\par - 0 = 0 \Rifeq{0}{0} ok\else fehler\fi\par - 0 = 1 \Rifeq{0}{1} fehler\else ok\fi\par - 1 = 0 \Rifeq{1}{0} fehler\else ok\fi\par - 1 = 1 \Rifeq{1}{1} ok\else fehler\fi\par - 1 = 2 \Rifeq{1}{2} fehler\else ok\fi\par - 2 = 1 \Rifeq{2}{1} fehler\else ok\fi\par - 0 = -1 \Rifeq{0}{-1} fehler\else ok\fi\par - -1 = 0 \Rifeq{-1}{0} fehler\else ok\fi\par - -1 = -1 \Rifeq{-1}{-1} ok\else fehler\fi\par - -1 = -2 \Rifeq{-1}{-2} fehler\else ok\fi\par - -2 = -1 \Rifeq{-2}{-1} fehler\else ok\fi\par - - 1 = 1.2 \Rifeq{1}{1.2} fehler\else ok\fi\par - 1.2 = 1 \Rifeq{1.2}{1} fehler\else ok\fi\par - -1 = -1.2 \Rifeq{-1}{-1.2} fehler\else ok\fi\par - -1.2 = -1 \Rifeq{-1.2}{-1} fehler\else ok\fi\par - - 0.1 = 0.1 \Rifeq{0.1}{0.1} ok\else fehler\fi\par - 0.1 = 0.2 \Rifeq{0.1}{0.2} fehler\else ok\fi\par - 0.2 = 0.1 \Rifeq{0.2}{0.1} fehler\else ok\fi\par - -0.1 = -0.2 \Rifeq{-0.1}{-0.2} fehler\else ok\fi\par - -0.1 = -0.1 \Rifeq{-0.1}{-0.1} ok\else fehler\fi\par - -0.2 = -0.1 \Rifeq{-0.2}{-0.1} fehler\else ok\fi\par -} - -\def\testifgt{% - \message{Rifgt} - Test: Rifgt\par - 0 $>$ 0 \Rifgt{0}{0} fehler\else ok\fi\par - 0 $>$ 1 \Rifgt{0}{1} fehler\else ok\fi\par - 1 $>$ 0 \Rifgt{1}{0} ok\else fehler\fi\par - 1 $>$ 1 \Rifgt{1}{1} fehler\else ok\fi\par - 1 $>$ 2 \Rifgt{1}{2} fehler\else ok\fi\par - 2 $>$ 1 \Rifgt{2}{1} ok\else fehler\fi\par - 0 $>$ -1 \Rifgt{0}{-1} ok\else fehler\fi\par - -1 $>$ 0 \Rifgt{-1}{0} fehler\else ok\fi\par - -1 $>$ -1 \Rifgt{-1}{-1} fehler\else ok\fi\par - -1 $>$ -2 \Rifgt{-1}{-2} ok\else fehler\fi\par - -2 $>$ -1 \Rifgt{-2}{-1} fehler\else ok\fi\par - - 1 $>$ 1.2 \Rifgt{1}{1.2} fehler\else ok\fi\par - 1.2 $>$ 1 \Rifgt{1.2}{1} ok\else fehler\fi\par - -1 $>$ -1.2 \Rifgt{-1}{-1.2} ok\else fehler\fi\par - -1.2 $>$ -1 \Rifgt{-1.2}{-1} fehler\else ok\fi\par - - 0.1 $>$ 0.1 \Rifgt{0.1}{0.1} fehler\else ok\fi\par - 0.1 $>$ 0.2 \Rifgt{0.1}{0.2} fehler\else ok\fi\par - 0.2 $>$ 0.1 \Rifgt{0.2}{0.1} ok\else fehler\fi\par - -0.1 $>$ -0.2 \Rifgt{-0.1}{-0.2} ok\else fehler\fi\par - -0.1 $>$ -0.1 \Rifgt{-0.1}{-0.1} fehler\else ok\fi\par - -0.2 $>$ -0.1 \Rifgt{-0.2}{-0.1} fehler\else ok\fi\par -} - -\def\testifneg{% - \message{Rifneg} - Test: Rifneg\par - 0: \Rifneg{0} fehler\else ok\fi\par - 0.5: \Rifneg{0.5} fehler\else ok\fi\par - .5: \Rifneg{.5} fehler\else ok\fi\par - 1: \Rifneg{1} fehler\else ok\fi\par - -0: \Rifneg{-0} fehler\else ok\fi\par - -0.5: \Rifneg{-0.5} ok\else fehler\fi\par - -1: \Rifneg{-1} ok\else fehler\fi\par -} - -\def\testifzero{% - \message{Rifzero} - Test: Rifzero\par - 0: \Rifzero{0} ok\else fehler\fi\par - 0.5: \Rifzero{0.5} fehler\else ok\fi\par - .5: \Rifzero{.5} fehler\else ok\fi\par - 1: \Rifzero{1} fehler\else ok\fi\par - -0: \Rifzero{-0} ok\else fehler\fi\par - -0.5: \Rifzero{-0.5} fehler\else ok\fi\par - -1: \Rifzero{-1} fehler\else ok\fi\par -} - -\def\testifpos{% - \message{Rifpos} - Test: Rifpos\par - 0: \Rifpos{0} ok\else fehler\fi\par - 0.5: \Rifpos{0.5} ok\else fehler\fi\par - .5: \Rifpos{.5} ok\else fehler\fi\par - 1: \Rifpos{1} ok\else fehler\fi\par - -0: \Rifpos{-0} ok\else fehler\fi\par - -0.5: \Rifpos{-0.5} fehler\else ok\fi\par - -1: \Rifpos{-1} fehler\else ok\fi\par -} - -\def\testifint{% - \message{Rifint} - Test: Rifint\par - 0: \Rifint{0} ok\else fehler\fi\par - -0: \Rifint{-0} ok\else fehler\fi\par - 1: \Rifint{1} ok\else fehler\fi\par - -1: \Rifint{-1} ok\else fehler\fi\par - 0.5: \Rifint{0.5} fehler\else ok\fi\par - -0.5: \Rifint{-0.5} fehler\else ok\fi\par - 1.5: \Rifint{1.5} fehler\else ok\fi\par - -1.5: \Rifint{-1.5} fehler\else ok\fi\par -} diff --git a/Master/texmf-dist/source/generic/realcalc/readme b/Master/texmf-dist/source/generic/realcalc/readme deleted file mode 100644 index aa152337fb9..00000000000 --- a/Master/texmf-dist/source/generic/realcalc/readme +++ /dev/null @@ -1,39 +0,0 @@ -realcalc.tex - -(Copyright) Frank Buchholz, Jan. 1993 -e-mail: buchholz@lusty.informatik.uni-dortmund.de - -Real arithmetic with big values and high precision. -Calculations are done with 9 decimal digits. -Usable with TeX and LaTeX. - -Files: - readme This file - realcalc.tex You have to \input realcalc.tex to use it. - realdemo.tex Demo with LaTeX. - realtest.tex Demo with TeX (Type \test\bye after the prompt) - -Installation: - Put the file realcalc.tex where your TeX looks for inputs. - Name a copy realcalc.sty to use as a LaTeX style option, - or create a file realcalc.sty with the lines: - \input realcalc.tex - \endinput - -Documentation: - Use following command to extract the documentation: - grep %% realcalc.tex - -COPYING: - Copying of part or all of this file is allowed under the following - conditions only: - (1) You may freely distribute unchanged copies of the files. You have - to include this file when you do so. - (2) You may modify a renamed copy of the files, but only for personal - use or use within an organization. - (3) You may copy fragments from the files, for personal use or for - distribution, as long as credit is given where credit is due. - - You are NOT ALLOWED to take money for the distribution or use of - this file or modified versions or fragments thereof, except for - a nominal charge for copying etc. diff --git a/Master/texmf-dist/tex/generic/realcalc/realcalc.tex b/Master/texmf-dist/tex/generic/realcalc/realcalc.tex deleted file mode 100644 index be46167fc41..00000000000 --- a/Master/texmf-dist/tex/generic/realcalc/realcalc.tex +++ /dev/null @@ -1,581 +0,0 @@ -%% realcalc.tex -%% -%% (C) Frank Buchholz, Jan. 1993 -%% e-mail: buchholz@lusty.informatik.uni-dortmund.de -% User documentation: All lines starting with two % -% Try grep to extract these lines. -%% -%% Real arithmetic with big values and high precision. -%% Calculations are done with 9 decimal digits. -%% Usable with TeX and LaTeX. -%% -%% Parameter: -%% -%% <macro> Macro, witch catches the result. -%% <value> String or macro witch expands to a value in the range -%% from -2147483647.999999999 to 2147483647.999999999 -%% <precision> Number from 0 to 9 -%% -%% Functions: -%% - -% Don't read this file twice -\ifx\Radd\undefined \else \endinput \fi - -% Make "@" be a letters -\chardef\catamp=\the\catcode`\@ -\catcode`@=11 - -\def\@Rversion{Version 1.0, Jan. 1993} -\message{`Real arithmetic', \@Rversion (C) Frank Buchholz} - -% Allocation of temporary registers -\newcount\@ta -\newcount\@tb -% -\newcount\@xs % Sign of 1st value -\newcount\@xi % Integer part of 1st value -\newcount\@xf % Fractional part of 1st value -% -\newcount\@ys % Sign of 2nd value -\newcount\@yi % Integer part of 2nd value -\newcount\@yf % Fractional part of 2nd value -% -\newcount\@mil \@mil=1000000000 % 10^9 -% -\countdef\@xa240 -\countdef\@xb241 -\countdef\@xc242 -\countdef\@xd243 -\countdef\@xe244 -\countdef\@ya245 -\countdef\@yb246 -\countdef\@yc247 -\countdef\@yd248 -\countdef\@ye249 -\let\@f=\@tb -\let\@product=\@ta - -\chardef\@zero=0 - -%% \Radd<macro><value><value> Addition -\def\Radd#1#2#3{\@callc\@Radd#1{#2}{#3}} - -%% \Rsub<macro><value><value> Subtraction -\def\Rsub#1#2#3{\@callc\@Radd#1{#2}{-#3}} - -\def\@Radd#1#2.#3.#4\relax#5.#6.#7\relax{% - % #1 Macro, witch gets the result - % #2 integer part of 1st value - % #3 fractional part of 1st value - % #4 dummy to swallow everthing after the 2nd '.' - % #5 integer part of 2nd value - % #6 fractional part of 2nd value - % #7 dummy to swallow everthing after the 2nd '.' - % - \@readvalue\@xs\@xi\@xf{#2}{#3}% - \@readvalue\@ys\@yi\@yf{#5}{#6}% - % - % Add integer parts - \@ta=\@xi \advance\@ta\@yi% - % - % Add fractional parts if they are not zero - \ifnum\@xf=\@zero% - \ifnum\@yf=\@zero% - \@tb=\@zero% - \else% - \@longadd% - \fi% - \else% - \@longadd% - \fi% - % - % Store result - \@store#1\@ta\@tb% -} - -\def\@longadd{% - % Propagate sign to fractional parts - \multiply\@xf\@xs \multiply\@yf\@ys% - % - % Add fractional parts - \@tb=\@xf \advance\@tb\@yf% - % - % Calculate carry - \ifnum\@tb<\@zero% - \ifnum\@tb<-\@mil \advance\@ta -\@ne \advance\@tb\@mil \fi% - \else% - \ifnum\@tb<\@mil \else \advance\@ta \@ne \advance\@tb-\@mil \fi% - \fi% -} - -%% \Rmul<macro><value><value> Multiplication -\def\Rmul#1#2#3{\@callc\@Rmul#1{#2}{#3}} - -\def\@Rmul#1#2.#3.#4\relax#5.#6.#7\relax{% - % #1 Macro, witch gets the result - % #2 integer part of 1st value - % #3 fractional part of 1st value - % #4 dummy to swallow everthing after the 2nd '.' - % #5 integer part of 2nd value - % #6 fractional part of 2nd value - % #7 dummy to swallow everthing after the 2nd '.' - % - % How to do real multiplications: - % Split values in various parts - % x y = 1234 567890 . 123 456 789 - % -> xa xb xc xd xe - % -> ya yb yc yd ye - % Do 21 (!) integer multiplications if there are any fractional parts - % r = x * Y - % -> r = xi*yi - % + (xa*yc + xa*yc )*10^3 - % + (xa*yd + xd*ya )*10^-0 - % + (xa*ye + xe*ya + xb*yc + xc*yb)*10^-3 - % + (xb*yd + xd*yb + xc*yc )*10^-6 - % + (xb*ye + xe*yb + xc*yd + xd*yc)*10^-9 - % + (xc*ye + xe*yc + xd*yd )*10^-12 - % + (xd*ye + xe*yd )*10^-15 - % + (xe*ye )*10^-18 - % - % -> r = ((((( xe*ye / 1000 - % + xd*ye + xe*yd ) / 1000 - % + xc*ye + xe*yc + xd*yd ) / 1000 - % + xb*ye + xe*yb + xc*yd + xd*yc ) / 1000 - % + xb*yd + xd*yb + xc*yc ) / 1000 - % + xa*ye + ye*xa + xb*yc + xc*yb ) / 1000 - % + xa*yd + xd*ya + (xa*yc + ya*xc)*1000 + xi*yi - % The last three digigs are saved just before the divisions. - % - % Init - % - \@readvalue\@xs\@xi\@xf{#2}{#3}% - \@readvalue\@ys\@yi\@yf{#5}{#6}% - % - % Sign - \multiply\@xi\@xs% - \multiply\@yi\@ys% - \multiply\@xs\@ys% - % - \@product=\@zero% - % - \ifnum\@xf=\@zero% - \ifnum\@yf=\@zero% - % No fractional parts - \edef\@frac{000000000} % digits of fractional part - \else% - \@longmul % Long multiplication - \fi% - \else% - \@longmul % Long multiplication - \fi% - % - % Multiply integer parts - \count@=\@xi \multiply\count@\@yi% - \advance\@product\count@% - % - % Sign - \multiply\@product\@xs% - % - % Store result - \edef#1{\number\@product.\@frac}% -} - -% Do long multiplication -\def\@longmul{% - % Split values in pieces - \@f=1000000% - \count@=\@xi% - \divide\count@\@f \@xa=\count@% - \multiply\count@-\@f \advance\count@\@xi \@xb=\count@% - \count@=\@xf% - \divide\count@\@f \@xc=\count@% - \multiply\count@-\@f \advance\count@\@xf% - \@f=1000% - \@xe=\count@% - \divide\count@\@f \@xd=\count@% - \multiply\count@-\@f \advance\count@\@xe \@xe=\count@% - % - \@f=1000000% - \count@=\@yi% - \divide\count@\@f \@ya=\count@% - \multiply\count@-\@f \advance\count@\@yi \@yb=\count@% - \count@=\@yf% - \divide\count@\@f \@yc=\count@% - \multiply\count@-\@f \advance\count@\@yf% - \@f=1000% - \@ye=\count@% - \divide\count@\@f \@yd=\count@% - \multiply\count@-\@f \advance\count@\@ye \@ye=\count@% - % - \edef\@frac{} % digits of fractional part - % - \@mul ee \relax\@shift % 10^-18 - \@mul de ed \relax\@shift % 10^-15 - \@mul ce ec dd \relax\@shift % 10^-12 - \@mul be eb cd dc \relax\@saveshift % 10^-9 - \@mul bd db cc \relax\@saveshift % 10^-6 - \@mul ae ea bc cb \relax\@saveshift % 10^-3 - \multiply\@xa\@f \multiply\@xc\@f % 10^3 - \@mul ad da ac ca \relax% -} - -\def\@mul#1#2#3{% - \count@=\csname @x#1\endcsname% - \multiply\count@\csname @y#2\endcsname% - \advance\@product\count@% - % - \ifx#3\relax% - \let\next=\relax% - \else% - \let\next=\@mul% - \fi% - \next#3% -} - -\def\@shift{% - \divide\@product\@f% -} - -\def\@saveshift{% - % Save rightmost digits - \count@=\@product% - \divide\@product\@f% - \multiply\@product\@f% - \advance\count@-\@product% - \advance\count@\@f% - \edef\@frac{\expandafter\@ignorenext\number\count@\@frac}% - % - \divide\@product\@f% -} - -%% \Rdiv<macro><value><value> Division -\def\Rdiv#1#2#3{\@callc\@Radd#1{#2}{#3}} - -\def\@Rdiv#1#2.#3.#4\relax#5.#6.#7\relax{% - % #1 Macro, witch gets the result - % #2 integer part of 1st value - % #3 fractional part of 1st value - % #4 dummy to swallow everthing after the 2nd '.' - % #5 integer part of 2nd value - % #6 fractional part of 2nd value - % #7 dummy to swallow everthing after the 2nd '.' - % - \message{Error: Rdiv not ready} - % - \@readvalue\@xs\@xi\@xf{#2}{#3}% - \@readvalue\@ys\@yi\@yf{#5}{#6}% - % - \ifnum\@yi=\@zero - \@xi=\@zero - \else - \divide\@xi\@yi - \fi - % - \@store#1\@xi\@xf% -} - -%% \Rneg<macro><value> Negation -\def\Rneg#1#2{% - % Expand the value and split it into the integer and the fractional part - \edef\next{\noexpand\@Rneg\noexpand#1#2..\noexpand\relax}% - \next% -} - -\def\@Rneg#1#2.#3.#4\relax{ - % #1 Macro, witch gets the result - % #2 Integer part of value - % #3 Fractional part of value - % #4 Remaining tokens - % - \@readvalue\@xs\@xi\@xf{#2}{#3}% - % - % Change sign - \multiply\@xi-\@ne% - \multiply\@xf-\@xs% - % - % Store result - \@store#1\@xi\@xf% -} - -%% -%% \Rtrunc<macro><precision><value> Truncate value to specified precision -\def\Rtrunc#1#2#3{% - % Expand parameter and split the value into the integer and fractional part - \edef\next{\noexpand\@Rtrunc\noexpand#1#2#3..\noexpand\relax}% - \next% -} - -\def\@Rtrunc#1#2#3.#4.#5\relax{% - % #1 Macro, witch gets the result - % #2 Number of decimal places - % #3 Integer part of value - % #4 Fractional part of value - % #5 dummy to swallow everthing after the 2nd '.' - % - \count@=#2% - \edef\next{\empty}% - \ifnum\count@>\@zero% - \expandafter\@@Rtrunc#4000000000\relax% - \fi% - \edef#1{#3\next}% -} - -\def\@@Rtrunc#1#2#3#4#5#6#7#8#9{% - % #1...#9 fractional part, padded with trailing zeros - \edef\next{.#1% - \ifnum\count@>1 #2\fi% - \ifnum\count@>2 #3\fi% - \ifnum\count@>3 #4\fi% - \ifnum\count@>4 #5\fi% - \ifnum\count@>5 #6\fi% - \ifnum\count@>6 #7\fi% - \ifnum\count@>7 #8\fi% - \ifnum\count@>8 #9\fi% - }% - \@swallow% -} - -%% -%% \Rifle<value><value> Test v1 < v2 -\def\Rifle#1#2{\@callb\@Rifle{#1}{#2}} - -\def\@Rifle#1.#2.#3\relax#4.#5.#6\relax{% - % #1 integer part of 1st value - % #2 fractional part of 1st value - % #3 dummy to swallow everthing after the 2nd '.' - % #4 integer part of 2nd value - % #5 fractional part of 2nd value - % #6 dummy to swallow everthing after the 2nd '.' - % - \@readvalue\@xs\@xi\@xf{#1}{#2}% - \@readvalue\@ys\@yi\@yf{#4}{#5}% - % - \ifnum\@xs<\@ys% - \Rtesttrue% - \else% - \ifnum\@xs>\@ys% - \Rtestfalse% - \else% - \Rtestfalse% - \ifnum\@xi<\@yi \Rtesttrue \fi% - \ifnum\@xi=\@yi% - \multiply\@xf\@xs \multiply\@yf\@ys% - \ifnum\@xf<\@yf \Rtesttrue \fi% - \fi% - \fi% - \fi% - % - \ifRtest% -} - -%% \Rifeq<value><value> Test v1 = v2 -\def\Rifeq#1#2{\@callb\@Rifeq{#1}{#2}} - -\def\@Rifeq#1.#2.#3\relax#4.#5.#6\relax{% - % #1 integer part of 1st value - % #2 fractional part of 1st value - % #3 dummy to swallow everthing after the 2nd '.' - % #4 integer part of 2nd value - % #5 fractional part of 2nd value - % #6 dummy to swallow everthing after the 2nd '.' - % - \@readvalue\@xs\@xi\@xf{#1}{#2}% - \@readvalue\@ys\@yi\@yf{#4}{#5}% - % - \Rtestfalse% - \ifnum\@xi=\@yi\ifnum\@xf=\@yf \Rtesttrue \fi\fi% - \ifRtest% -} - -%% \Rifgt<value><value> Test v1 > v2 -\def\Rifgt#1#2{\@callb\@Rifgt{#1}{#2}} - -\def\@Rifgt#1.#2.#3\relax#4.#5.#6\relax{% - % #1 integer part of 1st value - % #2 fractional part of 1st value - % #3 dummy to swallow everthing after the 2nd '.' - % #4 integer part of 2nd value - % #5 fractional part of 2nd value - % #6 dummy to swallow everthing after the 2nd '.' - % - \@readvalue\@xs\@xi\@xf{#1}{#2}% - \@readvalue\@ys\@yi\@yf{#4}{#5}% - % - \ifnum\@xs>\@ys% - \Rtesttrue% - \else% - \ifnum\@xs<\@ys% - \Rtestfalse% - \else% - \Rtestfalse% - \ifnum\@xi>\@yi \Rtesttrue \fi% - \ifnum\@xi=\@yi% - \multiply\@xf\@xs \multiply\@yf\@ys% - \ifnum\@xf>\@yf \Rtesttrue \fi% - \fi% - \fi% - \fi% - % - \ifRtest% -} - -%% \Rifneg<value> Test v < 0 -\def\Rifneg#1{\@calla\@Rifneg{#1}} - -\def\@Rifneg#1.#2.#3\relax{% - % #1 Integer part of value - % #2 Fractional part of value - % #3 dummy to swallow everthing after the 2nd '.' - % - \@readvalue\@xs\@xi\@xf{#1}{#2}% - % - \ifnum\@xs<0 \Rtesttrue \else \Rtestfalse \fi% - \ifRtest% - } - -%% \Rifzero<value> Test v = 0 -\def\Rifzero#1{\@calla\@Rifzero{#1}} - -\def\@Rifzero#1.#2.#3\relax{% - % #1 Integer part of value - % #2 Fractional part of value - % #3 dummy to swallow everthing after the 2nd '.' - % - \@readvalue\@xs\@xi\@xf{#1}{#2}% - % - \Rtestfalse% - \ifnum\@xi=\@zero \ifnum\@xf=\@zero \Rtesttrue \fi \fi% - \ifRtest% -} - -%% \Rifpos<value> Test v >= 0 -%% Take care to have a corresponding \fi -\def\Rifpos#1{\@calla\@Rifpos{#1}} - -\def\@Rifpos#1.#2.#3\relax{% - % #1 Integer part of value - % #2 Fractional part of value - % #3 dummy to swallow everthing after the 2nd '.' - % - \@readvalue\@xs\@xi\@xf{#1}{#2}% - % - \ifnum\@xs<0 \Rtestfalse \else \Rtesttrue \fi% - \ifRtest% -} - -%% \Rifint<value> Test v is an integer value -%% Take care to have a corresponding \fi -\def\Rifint#1{\@calla\@Rifint{#1}} - -\def\@Rifint#1.#2.#3\relax{% - % #1 Integer part of value - % #2 Fractional part of value - % #3 dummy to swallow everthing after the 2nd '.' - % - \@readvalue\@xs\@xi\@xf{#1}{#2}% - % - \ifnum\@xf=0 \Rtesttrue \else \Rtestfalse \fi% - \ifRtest% -} - -% Utility macros - -\def\@calla#1#2{% - % #1 Macro to call - % #2 Value - % Expand the value and split them into the integer and the fractional part - \edef\next{\noexpand#1#2..\noexpand\relax}% - \next% -} - -\def\@callb#1#2#3{% - % #1 Macro to call - % #2 1st value - % #3 2nd value - % Expand the values and split them into the integer and the fractional parts - \edef\next{\noexpand#1#2..\noexpand\relax#3..\noexpand\relax}% - \next% -} - -\def\@callc#1#2#3#4{% - % #1 Macro to call - % #2 Macro, witch gets the result - % #3 1st value - % #4 2nd value - % Expand the values and split them into the integer and the fractional parts - \edef\next{\noexpand#1\noexpand#2#3..\noexpand\relax#4..\noexpand\relax}% - \next% -} - -%% \ifRtest ... \else ... \fi Re-execute the last test -\newif\ifRtest - -% -% Read value -% -\def\@readvalue#1#2#3#4#5{% - % #1 macro to catch the sign ( -1 or 1 ) - % #2 macro to catch the integer part (maybe negative) - % #3 macro to catch the fractional part (positive) - % #4.#5 value - % - % Regular expression [-...d]d...["."[d...]] - % Attention: There has to be at least one digit between "-" and "."! - % - % Integer part - \if !#4! #2=\@zero \else #2=#4 \fi% - % - % Sign - \ifnum#2<\@zero #1=-\@ne \else #1=\@ne \fi% - \ifnum#2=\@zero \ifnum #4#5<\@zero #1=-\@ne \fi \fi% - % - % Fractional part - \if !#5!% - #3=\@zero% - \else% - \@@setcount@#5000000000\relax% - #3=\count@% - \fi% -} - -% Set count@ to fractional part with trailing zeros -\def\@@setcount@#1#2#3#4#5#6#7#8#9{% - % #1...#9 fractional part, padded with '0' - \count@=#1#2#3#4#5#6#7#8#9% - \@swallow% -} - -% Swallow everything up to next \relax -\def\@swallow#1\relax{} - -% -% Store result -% -\def\@store#1#2#3{% - % #1 marcro to catch the result - % #2 counter with integer part (maybe negative) - % #3 counter with fractional part (maybe negative} - % - % Sign - \edef#1{}% - \count@=#3% - \ifnum\count@<\@zero% - \count@=-\count@% - \ifnum#2=\@zero% - \edef#1{-}% - \fi% - \fi% - % - % Pad fractional part with leading zeros - \advance\count@\@mil% - % - % Store result - \edef#1{#1\number#2.\expandafter\@ignorenext\number\count@}% -} - -% Ignore next token -\def\@ignorenext#1{} - -% Restore catcode of "@" -\catcode`\@=\catamp |