Introduction
Introduction Statistics Contact Development Disclaimer Help
On bit-splitting - libzahl - big integer library
git clone git://git.suckless.org/libzahl
Log
Files
Refs
README
LICENSE
---
commit 12c7344ec6770c692094456bc81e7ed4322552aa
parent bc8390c7615cf9a466420aa05130322488d54d7b
Author: Mattias Andrée <[email protected]>
Date: Sat, 14 May 2016 20:51:30 +0200
On bit-splitting
Signed-off-by: Mattias Andrée <[email protected]>
Diffstat:
M doc/bit-operations.tex | 46 +++++++++++++++++++++++++++++…
1 file changed, 45 insertions(+), 1 deletion(-)
---
diff --git a/doc/bit-operations.tex b/doc/bit-operations.tex
@@ -110,7 +110,51 @@ $r = \phantom{10001}1000_2$ after calling
\section{Split}
\label{sec:Split}
-TODO % zsplit
+In \secref{sec:Shift} and \secref{sec:Truncation}
+we have seen how bit operations can be used to
+calculate division by a power of two and
+modulus a power of two efficiently using
+bit-shift and bit-truncation operations. libzahl
+also has a bit-split operation that can be used
+to efficently calculate both division and
+modulus a power of two efficiently in the same
+operation, or equivalently, storing low bits
+in one integer and high bits in another integer.
+This function is
+
+\begin{alltt}
+ void zsplit(z_t high, z_t low, z_t a, size_t b);
+\end{alltt}
+
+\noindent
+Unlike {\tt zdivmod}, it is not more efficient
+than calling {\tt zrsh} and {\tt ztrunc}, but
+it is more convenient. {\tt zsplit} requires
+that {\tt high} and {\tt low} are from each
+other distinct references.
+
+Calling {\tt zsplit(high, low, a, b)} is
+equivalent to
+
+\begin{alltt}
+ ztrunc(low, a, delim);
+ zrsh(high, a, delim);
+\end{alltt}
+
+\noindent
+assuming {\tt a} and {\tt low} are not the
+same reference (reverse the order of the
+functions if they are the same reference.)
+
+{\tt zsplit} copies the lowest {\tt b} bits
+of {\tt a} to {\tt low}, and the rest of the
+bits to {\tt high}, with the lowest {\tt b}
+removesd. For example, if $a = 1010101111_2$,
+then $high = 101010_2$ and $low = 1111_2$
+after calling {\tt zsplit(high, low, a, 4)}.
+
+{\tt zsplit} is especially useful in
+divide-and-conquer algorithms.
\newpage
You are viewing proxied material from suckless.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.