1
0
mirror of https://github.com/moparisthebest/pacman synced 2024-10-31 15:45:03 -04:00

Add simple integer-only pow() implementation

We hardly need the complexity (or slowness) provided by the libm power
function; add a super-cheap one that suits our needs and is specialized
for the values we plan on passing in.

Signed-off-by: Dan McGee <dan@archlinux.org>
This commit is contained in:
Dan McGee 2012-02-02 22:36:46 -06:00
parent e8db984ce5
commit e01fdc3dba

View File

@ -36,7 +36,6 @@
#include <unistd.h>
#include <limits.h>
#include <wchar.h>
#include <math.h> /* pow */
#ifdef HAVE_TERMIOS_H
#include <termios.h> /* tcflush */
#endif
@ -989,6 +988,17 @@ static char *pkg_get_location(alpm_pkg_t *pkg)
}
}
/* a pow() implementation that is specialized for an integer base and small,
* positive-only integer exponents. */
static double simple_pow(int base, int exp)
{
double result = 1.0;
for(; exp > 0; exp--) {
result *= base;
}
return result;
}
/** Converts sizes in bytes into human readable units.
*
* @param bytes the size in bytes
@ -1025,7 +1035,8 @@ double humanize_size(off_t bytes, const char target_unit, int precision,
}
/* fix FS#27924 so that it doesn't display negative zeroes */
if(precision >= 0 && val < 0.0 && val > (-0.5 / pow(10, precision))) {
if(precision >= 0 && val < 0.0 &&
val > (-0.5 / simple_pow(10, precision))) {
val = 0.0;
}