[metapost] A modest proposal
Toby Thurston
thurston at eml.cc
Tue Aug 4 17:41:01 CEST 2015
Now that the higher precision number systems are maturing, and being used more, it might be a good time to update "plain.mp" to remove the hard coded 5-figure decimals. In all cases it's fairly easy to find an equivalent definition which would work accurately at full numeric precision regardless of which engine is being used.
The values I can see are
> eps := .00049; % this is a pretty small positive number
> infinity := 4095.99998; % and this is the largest
>
> .
> .
> .
>
> %% units of measure
>
> mm=2.83464; pt=0.99626; dd=1.06601; bp:=1;
> cm=28.34645; pc=11.95517; cc=12.79213; in:=72;
>
> vardef magstep primary m = mexp(46.67432m) enddef;
The definition of epsilon shows us a better way
> epsilon := 1/256/256; % but this is the smallest
Adopting that strategy we can write the following which work well regardless of number system
eps := 1/2048;
infinity := 64*64-epsilon;
The units require a little bit more thought (and a quick reference to the Texbook for "dd"), but nevertheless here are some exact definitions that would also work with all number systems
1 = 1 bp;
72 = 1 in;
800 = 803 pt;
360 = 127 mm;
3600 = 127 cm;
1 pc = 12 pt;
1 cc = 12 dd;
1157 dd = 1238 pt;
Finally for magstep we could have
vardef magstep primary m = mexp(mlog(1.2)*m) enddef;
Any thoughts? Could these be changes in the next version of plain.mp?
Toby T.
More information about the metapost
mailing list