From 3bf42c6ff3805a0d42bbc661794a95ff31bedc26 Mon Sep 17 00:00:00 2001 From: untodesu Date: Sat, 15 Mar 2025 16:22:09 +0500 Subject: Add whatever I was working on for the last month --- core/floathacks.hh | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 core/floathacks.hh (limited to 'core/floathacks.hh') diff --git a/core/floathacks.hh b/core/floathacks.hh new file mode 100644 index 0000000..2c6a3e1 --- /dev/null +++ b/core/floathacks.hh @@ -0,0 +1,50 @@ +#ifndef CORE_FLOATHACKS_HH +#define CORE_FLOATHACKS_HH 1 +#pragma once + +namespace floathacks +{ +static inline float int32_to_float(const std::int32_t value); +static inline float uint32_to_float(const std::uint32_t value); +static inline std::int32_t float_to_int32(const float value); +static inline std::uint32_t float_to_uint32(const float value); +} // namespace floathacks + +static inline float floathacks::int32_to_float(const std::int32_t value) +{ + static_assert(std::numeric_limits::is_iec559); + static_assert(sizeof(std::int32_t) == sizeof(float)); + union { std::int32_t src; float dst; } hack; + hack.src = value; + return hack.dst; + +} + +static inline float floathacks::uint32_to_float(const std::uint32_t value) +{ + static_assert(std::numeric_limits::is_iec559); + static_assert(sizeof(std::uint32_t) == sizeof(float)); + union { std::uint32_t src; float dst; } hack; + hack.src = value; + return hack.dst; +} + +static inline std::int32_t floathacks::float_to_int32(const float value) +{ + static_assert(std::numeric_limits::is_iec559); + static_assert(sizeof(std::int32_t) == sizeof(float)); + union { float src; std::int32_t dst; } hack; + hack.src = value; + return hack.dst; +} + +static inline std::uint32_t floathacks::float_to_uint32(const float value) +{ + static_assert(std::numeric_limits::is_iec559); + static_assert(sizeof(std::uint32_t) == sizeof(float)); + union { float src; std::uint32_t dst; } hack; + hack.src = value; + return hack.dst; +} + +#endif /* CORE_FLOATHACKS_HH */ -- cgit