[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
## [Groff] About numerical precision

**From**: |
Thomas Baruchel |

**Subject**: |
[Groff] About numerical precision |

**Date**: |
Wed, 2 Apr 2003 13:24:35 +0200 |

**User-agent**: |
Mutt/1.2.5i |

Brest, le mercredi 2 avril
Hi, I am re-writing my personal macros in a cleaner way. I have a trouble
for the following purpose. I want to implement Adobe specification on
building a SmallCaps font from a regular one, by using \s and \H escape
sequences. But of course, groff isn't a mathematical arbitrary precision
tool :-( I want to keep at least 1 correct digit in the final numerical
value, which is a quite modest purpose (but I really want it, because
10.5 isn't the same than 10 for my purpose).
Here are the specifications and the way I am implementing it.
horizontal scale = .9
vertical scale = ((X-x)/3+x)/X
where x is the height of current x and X the height of current X
OK for the horizontal scale:
\s[9*\\n(.s/10] \\ instead of \ for obvious context reasons
BUT for the vertical scaling:
I need in fact ((X-x)/3+x)/X*s with s = \\n(.s
as an argument for \H escape sequence
I have very easely (X-x)/3+x with a good precision in scaled points.
For instance, calling my macro with Minion-Regular 72,
having x = 31248
X = 46800
I get (X-x)/3+x = 36432 (ie. 36.432p)
which is what I expected
But, I can't manage to get \H'36432*72/46800' without any
error: \H'\\nY*\\n(.s/\\nX' produces a multiplication overflow
and \H'36432/46800*72' seems to produce some \H'0' for obvious precision
reasons.
Any idea ?
--
Deux choses remplissent le coeur d'une admiration et d'une vénération
toujours nouvelles et toujours croissantes, à mesure que la réflexion
s'y attache et s'y applique : le ciel étoilé au-dessus de moi et la loi
morale en moi. (Emmanuel Kant)

**[Groff] About numerical precision**,
*Thomas Baruchel* **<=**