LATEX-L Archives

Mailing list for the LaTeX3 project


Options: Use Forum View

Use Monospaced Font
Show Text Part by Default
Show All Mail Headers

Message: [<< First] [< Prev] [Next >] [Last >>]
Topic: [<< First] [< Prev] [Next >] [Last >>]
Author: [<< First] [< Prev] [Next >] [Last >>]

Print Reply
Lars Hellström <[log in to unmask]>
Reply To:
Mailing list for the LaTeX3 project <[log in to unmask]>
Wed, 16 Jun 2010 14:19:40 +0200
text/plain (55 lines)
Joseph Wright skrev:
> Hello all,
> Those of you who take an interest in the LaTeX3 SVN may have noticed 
> that I've just added the beginnings of a 'l3fp' module as part of expl3. 
> This is intended to provide a set of floating point functions for LaTeX3.
> In terms of input range, I've gone for -999999999.999999999 to 
> +999999999.999999999. This should be sufficient for a wide range of 
> purposes (for example, if you convert a dimen into a floating point 
> number in units pt then you are safe for any dimen TeX can handle).

I was as confused by this as J.Fine, but it now seems clear that you've 
implemented a fixed point arithmetic package that possibly will become 
a floating point arithmetic package.

> The design of the internals of the package is loosely following the 
> well-known fp package. However, that package is rather slow, at least 
> partly as it handles 18 digits either side of the decimal. The approach 
> in l3fp currently delivers addition, subtraction, multiplication and 
> division much faster than fp does (between about 8 and 15 times as fast 
> for a large number of repeated calculations). I hope this makes the 
> module fast enough for practical use.
> The next phase is to add some more complex functions. I'm planning to 
> cover trigonometry, exponential/ln and roots, plus a pseudo-random 
> number generator

That most standard libraries primarily provide a "uniform in $[0,1]$" 
(or some open variation of that interval) PRNG doesn't mean it is the 
most natural form of a PRNG. It is entirely reasonable for an l3 core 
PRNG to primarily produce random bits or random integers, which could 
then be converted to random floats if anyone asks for it; it's easier 
than going the other way.

> and a few utility functions. They may take a while: 
> getting it right is not that easy.
> Feedback on the module is very welcome, for example on which functions 
> to provide, bugs (there are bound to be some), etc.

There are some standard floating-point arithmetic modules for MetaPost, 
which could perhaps provide inspiration, but on closer inspection those 
seem to rely on built-in primitives for logarithm and exponent (of 
course, one can then take a look in mp.web to see how Knuth implemented 
those while avoiding overflow and such, but the level of indirection is 
then pretty high).

Two Meta*-ish operations which could well be useful in LaTeX are 
"Pythagorean addition" (known as hypot in the C library I think) and 
"Pythagorean subtraction" (given one side and the hypothenuse, find the 
other side).

Lars Hellström