diff options
author | Hans Hagen <pragma@wxs.nl> | 2022-09-16 15:53:42 +0200 |
---|---|---|
committer | Context Git Mirror Bot <phg@phi-gamma.net> | 2022-09-16 15:53:42 +0200 |
commit | c161b7d6fe142231346cc1844e6e27c0ab7718c1 (patch) | |
tree | 3fd877b8986137703e987e4651a2db8e946a0f72 /source/luametatex/source/tex/texarithmetic.h | |
parent | e94fa4dc30ec28a6727aa85e17aaac18b76aeadb (diff) | |
download | context-c161b7d6fe142231346cc1844e6e27c0ab7718c1.tar.gz |
2022-09-16 14:41:00
Diffstat (limited to 'source/luametatex/source/tex/texarithmetic.h')
-rw-r--r-- | source/luametatex/source/tex/texarithmetic.h | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/source/luametatex/source/tex/texarithmetic.h b/source/luametatex/source/tex/texarithmetic.h new file mode 100644 index 000000000..53deca36b --- /dev/null +++ b/source/luametatex/source/tex/texarithmetic.h @@ -0,0 +1,42 @@ +/* + See license.txt in the root of this project. +*/ + +# ifndef LMT_ARITHMETIC_H +# define LMT_ARITHMETIC_H + +/*tex + + Fixed-point arithmetic is done on {\em scaled integers} that are multiples of $2^{-16}$. In + other words, a binary point is assumed to be sixteen bit positions from the right end of a + binary computer word. + +*/ + +extern scaled tex_multiply_and_add (int n, scaled x, scaled y, scaled max_answer); +extern scaled tex_nx_plus_y (int n, scaled x, scaled y); +extern scaled tex_multiply_integers (int n, scaled x); +extern scaled tex_x_over_n_r (scaled x, int n, int *remainder); +extern scaled tex_x_over_n (scaled x, int n); +extern scaled tex_xn_over_d (scaled x, int n, int d); +extern scaled tex_xn_over_d_r (scaled x, int n, int d, int *remainder); +/* scaled tex_divide_scaled (scaled s, scaled m, int dd); */ +extern scaled tex_divide_scaled_n (double s, double m, double d); +extern scaled tex_ext_xn_over_d (scaled, scaled, scaled); +extern scaled tex_round_xn_over_d (scaled x, int n, unsigned int d); + +inline static scaled tex_round_decimals_digits(const unsigned char *digits, unsigned k) +{ + int a = 0; + while (k-- > 0) { + a = (a + digits[k] * two) / 10; + } + return (a + 1) / 2; +} + +inline static int tex_half_scaled(int x) +{ + return odd(x) ? ((x + 1) / 2) : (x / 2); +} + +# endif |