aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/BitOps/FloatTraits.php
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2025-04-05 23:26:56 +0900
committernsfisis <nsfisis@gmail.com>2025-04-06 02:03:32 +0900
commitb47f6c38389762aff3b1b86c179517d3e9d9eb87 (patch)
treeff1a3cae32e91a816537fc8dee961a9d4a2d9415 /src/BitOps/FloatTraits.php
parent3d0f0b06ee25571034a13a43d2ca660ef687afa9 (diff)
downloadphp-waddiwasi-b47f6c38389762aff3b1b86c179517d3e9d9eb87.tar.gz
php-waddiwasi-b47f6c38389762aff3b1b86c179517d3e9d9eb87.tar.zst
php-waddiwasi-b47f6c38389762aff3b1b86c179517d3e9d9eb87.zip
refactor: add BitOps component
Diffstat (limited to 'src/BitOps/FloatTraits.php')
-rw-r--r--src/BitOps/FloatTraits.php50
1 files changed, 50 insertions, 0 deletions
diff --git a/src/BitOps/FloatTraits.php b/src/BitOps/FloatTraits.php
new file mode 100644
index 0000000..dca9e18
--- /dev/null
+++ b/src/BitOps/FloatTraits.php
@@ -0,0 +1,50 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Nsfisis\Waddiwasi\BitOps;
+
+final readonly class FloatTraits
+{
+ public const int F32_EXPONENT_BITS = 8;
+ public const int F32_MANTISSA_BITS = 23;
+
+ public const int F32_SIGN_MASK = 0b10000000_00000000_00000000_00000000;
+ public const int F32_EXPONENT_MASK = 0b01111111_10000000_00000000_00000000;
+ public const int F32_MANTISSA_MASK = 0b00000000_01111111_11111111_11111111;
+
+ public const int F32_SIGN_UNSIGNED = 0;
+ public const int F32_SIGN_SIGNED = 0b10000000_00000000_00000000_00000000;
+ public const int F32_EXPONENT_NAN = 0b01111111_10000000_00000000_00000000;
+
+ public const int F64_EXPONENT_BITS = 11;
+ public const int F64_MANTISSA_BITS = 52;
+
+ public const int F64_SIGN_MASK = PHP_INT_MIN;
+ public const int F64_EXPONENT_MASK = 0b01111111_11110000_00000000_00000000_00000000_00000000_00000000_00000000;
+ public const int F64_MANTISSA_MASK = 0b00000000_00001111_11111111_11111111_11111111_11111111_11111111_11111111;
+
+ public const int F64_SIGN_UNSIGNED = 0;
+ public const int F64_SIGN_SIGNED = PHP_INT_MIN;
+ public const int F64_EXPONENT_NAN = 0b01111111_11110000_00000000_00000000_00000000_00000000_00000000_00000000;
+
+ private function __construct()
+ {
+ }
+
+ public static function getF32SignBit(Signedness $sign): int
+ {
+ return match ($sign) {
+ Signedness::Unsigned => self::F32_SIGN_UNSIGNED,
+ Signedness::Signed => self::F32_SIGN_SIGNED,
+ };
+ }
+
+ public static function getF64SignBit(Signedness $sign): int
+ {
+ return match ($sign) {
+ Signedness::Unsigned => self::F64_SIGN_UNSIGNED,
+ Signedness::Signed => self::F64_SIGN_SIGNED,
+ };
+ }
+}