11 #include <type_traits> 18 template<
unsigned int I,
unsigned int F,
typename R,
typename T,
19 std::enable_if_t<std::is_integral_v<R> &&
20 std::is_floating_point_v<T>> * =
nullptr>
22 template<
unsigned int I,
unsigned int F,
typename R,
typename T>
26 static_assert(
sizeof(
int) >=
sizeof(R));
27 static_assert(I + F <=
sizeof(R) * 8);
34 R mask = (1 << (F + I)) - 1;
35 R frac =
static_cast<R
>(
static_cast<int>(std::round(number * (1 << F)))) & mask;
41 template<
unsigned int I,
unsigned int F,
typename R,
typename T,
42 std::enable_if_t<std::is_floating_point_v<R> &&
43 std::is_integral_v<T>> * =
nullptr>
45 template<
unsigned int I,
unsigned int F,
typename R,
typename T>
49 static_assert(
sizeof(
int) >=
sizeof(T));
50 static_assert(I + F <=
sizeof(T) * 8);
58 int remaining_bits =
sizeof(int) * 8 - (I + F);
59 int t =
static_cast<int>(
static_cast<unsigned>(number) << remaining_bits) >> remaining_bits;
60 return static_cast<R
>(t) / static_cast<R>(1 << F);
Top-level libcamera namespace.
Definition: backtrace.h:17
constexpr R fixedToFloatingPoint(T number)
Convert a fixed-point number to a floating point representation.
Definition: fixedpoint.h:47
constexpr R floatingToFixedPoint(T number)
Convert a floating point number to a fixed-point representation.
Definition: fixedpoint.h:24