1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
|
Source: xint.dtx 1.3e 2019/04/05 (doc 2019/04/05)
Author: Jean-Francois Burnol
Info: Expandable operations on big integers, decimals, fractions
License: LPPL 1.3e
This README is also available as README.pdf and README.html.
Change log is to be found in CHANGES.pdf or CHANGES.html.
The user manual is xint.pdf, and the commented source code is available
as sourcexint.pdf.
AIM
The basic aim is provide _expandable_ computations on integers,
fractions, and floating point numbers. For example
\xinttheexpr reduce(37189719/183618963+11390170/17310720)^17\relax
will evaluate exactly the fraction; the result has 462 characters
(including the fraction slash.) One can also work with dummy variables:
\xinttheexpr mul(add(x(x+1)(x+2), x=y..y+15), y=171286,98762,9296)\relax
evaluates to 15979066346135829902328007959448563667099190784.
Float computations are possible at an adjustable precision (default 16).
\xintDigits:=48;\xintthefloatexpr 123_456_789^1_000.5\relax
->3.63692761822782679930738270515740797370813691938e8095
(as this example shows the underscore character can be used to separate
visually digits, one can also use the space character for that purpose).
Square-root and the four operations achieve correct rounding in the
given arbitrary precision.
Trigonometric functions (direct and inverse) are available with a
maximal precision of 60 digits.
Logarithms and exponentials are available using the poormanlog package
which provides only 8 or 9 digits of precision. This will be increased
in future.
USAGE
It is possible to use the package both with Plain (\input xintexpr.sty)
or with LaTeX (\usepackage{xintexpr}).
With LaTeX
\usepackage{xint} % expandable arithmetic with big integers
\usepackage{xintfrac} % decimal numbers, fractions, floats
\usepackage{xinttools} % expandable and non expandable loops
\usepackage{xintexpr} % expressions with infix operators
The xinttrig and xintlog packages are loaded automatically by xintexpr
and will refuse to be loaded directly.
Further packages: xintbinhex, xintgcd, xintseries and xintcfrac.
Main dependencies are handled automatically. For example xintexpr
automatically loads xinttools and xintfrac (which itself loads xint).
Hexadecimal input requires explicit loading of xintbinhex.
Package xintcore is the subset of xint providing only the five
operations on big integers: \xintiiAdd, \xintiiMul, …
The LaTeX package bnumexpr defines a more light-weight parser of
arithmetical expressions using big integers, which supports only the
four operations, the modulo operation, the power operation, and the
factorial. By default it uses the macros from xintcore but this can be
customized.
The LaTeX package polexpr is based upon xintexpr and allows formal
algebra with polynomials, and finding all real roots with arbitrary
precision.
With TeX
One does for example:
\input xintexpr.sty
This will automatically load xintfrac.sty, xinttrig.sty, xintlog.sty and
xinttools.sty. The packages may be loaded in any catcode context such
that letters, digits, \ and % have their standard catcodes.
xintcore.sty and xinttools.sty both import xintkernel.sty which has the
catcode handler and package identifier and defines a few utilities such
as \oodef/\fdef, \xint_dothis/\xint_orthat, or \xintLength.
Since 1.3b, xintkernel.sty also provides \xintUniformDeviate which is a
wrapper of the engine \pdfuniformdeviate or \uniformdeviate done to
guarantee more uniformity of the pseudo-random integers.
INSTALLATION
Method A: using the package manager of your TeX distribution
xint is included in TeXLive (hence also MacTeX) and MikTeX.
There can be a few days of delay between apparition of a new version on
CTAN and availability via the distribution package manager.
Method B: manual installation using xint.tds.zip and unzip
Assumes a GNU/Linux-like system (or Mac OS X).
1. obtain xint.tds.zip from CTAN:
http://mirror.ctan.org/install/macros/generic/xint.tds.zip
2. cd to the download repertory and issue:
unzip xint.tds.zip -d <TEXMF>
where <TEXMF> is a suitable TDS-compliant destination repertory. For
example, with TeXLive:
- Linux, standard access rights, hence sudo is needed,
installation into the “local” tree:
sudo unzip xint.tds.zip -d /usr/local/texlive/texmf-local
sudo texhash /usr/local/texlive/texmf-local
- Mac OS X, installation into user home folder (no sudo needed,
and it is recommended to not have a ls-R file there, hence no
texhash):
unzip xint.tds.zip -d ~/Library/texmf
Method C: manual installation using Makefile and xint.dtx
The Makefile automatizes rebuilding from xint.dtx all documentation
files as well as xint.tds.zip. It is for GNU/Linux-like (inc. Mac OS X)
systems, with a teTeX like installation such as TeXLive. The Latexmk and
Pandoc softwares are required to build all the documentation.
1. obtain xint.dtx and Makefile from
http://mirror.ctan.org/macros/generic/xint.
2. put them in an otherwise empty working repertory, run make or
equivalently make help for further instructions.
Method D: installation starting with only xint.dtx
Run etex xint.dtx to extract from xint.dtx all macro files as well as
auxiliary files needed for building the documentation. Among them there
is Makefile.mk. If you are on a GNU/Linux-type system, rename the file
to Makefile and execute make on command line for further help. If you
can’t use make read the contents of the Makefile for instructions.
Finishing the installation in a TDS hierarchy:
- move the style files to TDS:tex/generic/xint/
- xint.dtx goes to TDS:source/generic/xint/
- The documentation (xint.pdf, README.md,…) goes to
TDS:doc/generic/xint/
Depending on the destination, it may then be necessary to refresh a
filename database.
LICENSE
Copyright (C) 2013-2019 by Jean-Francois Burnol
This Work may be distributed and/or modified under the conditions of the
LaTeX Project Public License version 1.3c. This version of this license
is in
http://www.latex-project.org/lppl/lppl-1-3c.txt
and version 1.3 or later is part of all distributions of LaTeX version
2005/12/01 or later.
This Work has the LPPL maintenance status author-maintained.
The Author of this Work is Jean-Francois Burnol.
This Work consists of the source file xint.dtx and of its derived files:
xintkernel.sty, xintcore.sty, xint.sty, xintfrac.sty, xintexpr.sty,
xinttrig.sty, xintlog.sty, xintbinhex.sty, xintgcd.sty, xintseries.sty,
xintcfrac.sty, xinttools.sty, xint.ins, xint.tex, README, README.md,
README.html, README.pdf, CHANGES.md, CHANGES.html, CHANGES.pdf,
pandoctpl.latex, doHTMLs.sh, doPDFs.sh, xint.dvi, xint.pdf, and
Makefile.mk.
|