aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMattias Andrée <maandree@kth.se>2016-03-02 08:57:46 +0100
committerMattias Andrée <maandree@kth.se>2016-03-02 08:57:50 +0100
commitfe15c7e5b115cae4717f5481e7962cf376066387 (patch)
tree31e2a0c18ceabd2deb6be9d78fdf03cb8072cd92
parentAdd typedef zahl_char_t for internal use (diff)
downloadlibzahl-fe15c7e5b115cae4717f5481e7962cf376066387.tar.gz
libzahl-fe15c7e5b115cae4717f5481e7962cf376066387.tar.bz2
libzahl-fe15c7e5b115cae4717f5481e7962cf376066387.tar.xz
Why zbits returns 1 for 0
Signed-off-by: Mattias Andrée <maandree@kth.se>
-rw-r--r--man/zbits.38
-rw-r--r--src/zbits.c5
2 files changed, 10 insertions, 3 deletions
diff --git a/man/zbits.3 b/man/zbits.3
index 3dea6d9..191a87c 100644
--- a/man/zbits.3
+++ b/man/zbits.3
@@ -25,6 +25,14 @@ absolute value of
\(em or 1 if
.I a
is zero.
+.SH RATIONALE
+.B zbits
+returns 1 rather than 0 if
+.B a
+is zero, this is to avoid off-by-one errors
+and it is the number of digits requires to
+write the number in binary. You will see this
+in corresponding functions in other libraries.
.SH SEE ALSO
.BR zlsb (3),
.BR zzero (3)
diff --git a/src/zbits.c b/src/zbits.c
index 8ada62f..f0c15c9 100644
--- a/src/zbits.c
+++ b/src/zbits.c
@@ -7,9 +7,8 @@ zbits(z_t a)
{
size_t i;
zahl_char_t x;
- if (zzero(a)) {
- return 1;
- }
+ if (zzero(a))
+ return 1; /* Deliver us from evil! */
for (i = a->used - 1;; i--) {
x = a->chars[i];
if (x) {