1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-31 12:38:12 +00:00

LibM: Add ilogb and logb

This commit is contained in:
Mițca Dumitru 2021-03-07 20:40:01 +02:00 committed by Andreas Kling
parent 190952675e
commit 352b383280
2 changed files with 60 additions and 0 deletions

View file

@ -243,6 +243,26 @@ static FloatType internal_nextafter(FloatType x, bool up)
return extractor.d;
}
template<typename FloatT>
static int internal_ilogb(FloatT x) NOEXCEPT
{
if (x == 0)
return FP_ILOGB0;
if (isnan(x))
return FP_ILOGNAN;
if (!isfinite(x))
return INT_MAX;
using Extractor = FloatExtractor<FloatT>;
Extractor extractor;
extractor.d = x;
return (int)extractor.exponent - Extractor::exponent_bias;
}
extern "C" {
double trunc(double x) NOEXCEPT
@ -547,6 +567,36 @@ double fabs(double value) NOEXCEPT
return value < 0 ? -value : value;
}
int ilogbl(long double x) NOEXCEPT
{
return internal_ilogb(x);
}
int ilogb(double x) NOEXCEPT
{
return internal_ilogb(x);
}
int ilogbf(float x) NOEXCEPT
{
return internal_ilogb(x);
}
long double logbl(long double x) NOEXCEPT
{
return ilogbl(x);
}
double logb(double x) NOEXCEPT
{
return ilogb(x);
}
float logbf(float x) NOEXCEPT
{
return ilogbf(x);
}
double log2(double x) NOEXCEPT
{
double ret = 0.0;