about summary refs log tree commit diff
path: root/src/math/logb.c
blob: f7cd7613069bc172c345bada309a3151a016cfab (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <limits.h>
#include "libm.h"

/*
special cases:
	logb(+-0) = -inf
	logb(+-inf) = +inf
	logb(nan) = nan
these are calculated at runtime to raise fp exceptions
*/

double logb(double x) {
	int i = ilogb(x);

	if (i == FP_ILOGB0)
		return -1.0/fabs(x);
	if (i == FP_ILOGBNAN || i == INT_MAX)
		return x * x;
	return i;
}