Subject: | |
From: | |
Reply To: | |
Date: | Mon, 5 May 2014 01:08:37 +0200 |
Content-Type: | text/plain |
Parts/Attachments: |
|
|
Hello,
macro \__dim_strip_bp:n is defined in l3skip.dtx the following way:
\cs_new:Npn \__dim_strip_bp:n #1
{ \__dim_strip_pt:n { 0.996 26 \__dim_eval:w #1 \__dim_eval_end: } }
The calculation from bp to bp is essentially:
\dimexpr 0.99626\dimexpr #1\relax\relax
Of course, there will always be rounding errors, but the code
can be improved by a scaling operation inside e-TeX's \dimexpr,
from "The e-TeX manual":
| The arithmetic operations are performed individually, except
| for ‘scaling’ operations (a multiplication immediately followed
| by a division) which are performed as one combined operation
| with a 64-bit product as intermediate value.
Improved version with higher precision:
\cs_new:Npn \__dim_strip_bp:n #1
{
\__dim_strip_pt:n
{
\__dim_eval:w ( #1 ) * 800 / 803 \__dim_eval_end:
}
}
* 800/803 is the integer fraction for 72/72.27
* The parentheses around #1 ensure, that #1 is
calculated first.
Yours sincerely
Heiko Oberdiek
|
|
|