1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 16:37:35 +00:00

AK: Add AK::ceil(float) and AK::ceil_log2(integer)

Co-authored-by: Leon Albrecht <leon2002.la@gmail.com>
This commit is contained in:
MacDue 2022-06-29 18:56:39 +01:00 committed by Andreas Kling
parent 1e36224321
commit 072a78b958
2 changed files with 25 additions and 0 deletions

View file

@ -8,6 +8,7 @@
#include <AK/BuiltinWrappers.h>
#include <AK/Concepts.h>
#include <AK/NumericLimits.h>
#include <AK/StdLibExtraDetails.h>
#include <AK/Types.h>
@ -665,6 +666,19 @@ constexpr T pow(T x, T y)
return exp2<T>(y * log2<T>(x));
}
template<FloatingPoint T>
constexpr T ceil(T num)
{
if (is_constant_evaluated()) {
if (num < NumericLimits<i64>::min() || num > NumericLimits<i64>::max())
return num;
return (static_cast<double>(static_cast<i64>(num)) == num)
? static_cast<i64>(num)
: static_cast<i64>(num) + ((num > 0) ? 1 : 0);
}
return __builtin_ceil(num);
}
#undef CONSTEXPR_STATE
}