functions.php ➔ toDouble()   B
last analyzed

Complexity

Conditions 6
Paths 10

Size

Total Lines 21
Code Lines 13

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 6
eloc 13
nc 10
nop 2
dl 0
loc 21
rs 8.7624
c 0
b 0
f 0
1
<?php
2
declare(strict_types=1);
3
4
namespace MessagePack;
5
6
// ANCII
7
const CHR = "\X0\X1\X2\X3\X4\X5\X6\X7\X8\X9\Xa\Xb\Xc\Xd\Xe\Xf\X10\X11\X12\X13\X14\X15\X16\X17\X18\X19\X1a\X1b\X1c\X1d\X1e\X1f\X20\X21\X22\X23\X24\X25\X26\X27\X28\X29\X2a\X2b\X2c\X2d\X2e\X2f\X30\X31\X32\X33\X34\X35\X36\X37\X38\X39\X3a\X3b\X3c\X3d\X3e\X3f\X40\X41\X42\X43\X44\X45\X46\X47\X48\X49\X4a\X4b\X4c\X4d\X4e\X4f\X50\X51\X52\X53\X54\X55\X56\X57\X58\X59\X5a\X5b\X5c\X5d\X5e\X5f\X60\X61\X62\X63\X64\X65\X66\X67\X68\X69\X6a\X6b\X6c\X6d\X6e\X6f\X70\X71\X72\X73\X74\X75\X76\X77\X78\X79\X7a\X7b\X7c\X7d\X7e\X7f\X80\X81\X82\X83\X84\X85\X86\X87\X88\X89\X8a\X8b\X8c\X8d\X8e\X8f\X90\X91\X92\X93\X94\X95\X96\X97\X98\X99\X9a\X9b\X9c\X9d\X9e\X9f\Xa0\Xa1\Xa2\Xa3\Xa4\Xa5\Xa6\Xa7\Xa8\Xa9\Xaa\Xab\Xac\Xad\Xae\Xaf\Xb0\Xb1\Xb2\Xb3\Xb4\Xb5\Xb6\Xb7\Xb8\Xb9\Xba\Xbb\Xbc\Xbd\Xbe\Xbf\Xc0\Xc1\Xc2\Xc3\Xc4\Xc5\Xc6\Xc7\Xc8\Xc9\Xca\Xcb\Xcc\Xcd\Xce\Xcf\Xd0\Xd1\Xd2\Xd3\Xd4\Xd5\Xd6\Xd7\Xd8\Xd9\Xda\Xdb\Xdc\Xdd\Xde\Xdf\Xe0\Xe1\Xe2\Xe3\Xe4\Xe5\Xe6\Xe7\Xe8\Xe9\Xea\Xeb\Xec\Xed\Xee\Xef\Xf0\Xf1\Xf2\Xf3\Xf4\Xf5\Xf6\Xf7\Xf8\Xf9\Xfa\Xfb\Xfc\Xfd\Xfe\Xff\X00";
8
const ORD = ["\X0"=>0,"\X1"=>1,"\X2"=>2,"\X3"=>3,"\X4"=>4,"\X5"=>5,"\X6"=>6,"\X7"=>7,"\X8"=>8,"\X9"=>9,"\Xa"=>10,"\Xb"=>11,"\Xc"=>12,"\Xd"=>13,"\Xe"=>14,"\Xf"=>15,"\X10"=>16,"\X11"=>17,"\X12"=>18,"\X13"=>19,"\X14"=>20,"\X15"=>21,"\X16"=>22,"\X17"=>23,"\X18"=>24,"\X19"=>25,"\X1a"=>26,"\X1b"=>27,"\X1c"=>28,"\X1d"=>29,"\X1e"=>30,"\X1f"=>31,"\X20"=>32,"\X21"=>33,"\X22"=>34,"\X23"=>35,"\X24"=>36,"\X25"=>37,"\X26"=>38,"\X27"=>39,"\X28"=>40,"\X29"=>41,"\X2a"=>42,"\X2b"=>43,"\X2c"=>44,"\X2d"=>45,"\X2e"=>46,"\X2f"=>47,"\X30"=>48,"\X31"=>49,"\X32"=>50,"\X33"=>51,"\X34"=>52,"\X35"=>53,"\X36"=>54,"\X37"=>55,"\X38"=>56,"\X39"=>57,"\X3a"=>58,"\X3b"=>59,"\X3c"=>60,"\X3d"=>61,"\X3e"=>62,"\X3f"=>63,"\X40"=>64,"\X41"=>65,"\X42"=>66,"\X43"=>67,"\X44"=>68,"\X45"=>69,"\X46"=>70,"\X47"=>71,"\X48"=>72,"\X49"=>73,"\X4a"=>74,"\X4b"=>75,"\X4c"=>76,"\X4d"=>77,"\X4e"=>78,"\X4f"=>79,"\X50"=>80,"\X51"=>81,"\X52"=>82,"\X53"=>83,"\X54"=>84,"\X55"=>85,"\X56"=>86,"\X57"=>87,"\X58"=>88,"\X59"=>89,"\X5a"=>90,"\X5b"=>91,"\X5c"=>92,"\X5d"=>93,"\X5e"=>94,"\X5f"=>95,"\X60"=>96,"\X61"=>97,"\X62"=>98,"\X63"=>99,"\X64"=>100,"\X65"=>101,"\X66"=>102,"\X67"=>103,"\X68"=>104,"\X69"=>105,"\X6a"=>106,"\X6b"=>107,"\X6c"=>108,"\X6d"=>109,"\X6e"=>110,"\X6f"=>111,"\X70"=>112,"\X71"=>113,"\X72"=>114,"\X73"=>115,"\X74"=>116,"\X75"=>117,"\X76"=>118,"\X77"=>119,"\X78"=>120,"\X79"=>121,"\X7a"=>122,"\X7b"=>123,"\X7c"=>124,"\X7d"=>125,"\X7e"=>126,"\X7f"=>127,"\X80"=>128,"\X81"=>129,"\X82"=>130,"\X83"=>131,"\X84"=>132,"\X85"=>133,"\X86"=>134,"\X87"=>135,"\X88"=>136,"\X89"=>137,"\X8a"=>138,"\X8b"=>139,"\X8c"=>140,"\X8d"=>141,"\X8e"=>142,"\X8f"=>143,"\X90"=>144,"\X91"=>145,"\X92"=>146,"\X93"=>147,"\X94"=>148,"\X95"=>149,"\X96"=>150,"\X97"=>151,"\X98"=>152,"\X99"=>153,"\X9a"=>154,"\X9b"=>155,"\X9c"=>156,"\X9d"=>157,"\X9e"=>158,"\X9f"=>159,"\Xa0"=>160,"\Xa1"=>161,"\Xa2"=>162,"\Xa3"=>163,"\Xa4"=>164,"\Xa5"=>165,"\Xa6"=>166,"\Xa7"=>167,"\Xa8"=>168,"\Xa9"=>169,"\Xaa"=>170,"\Xab"=>171,"\Xac"=>172,"\Xad"=>173,"\Xae"=>174,"\Xaf"=>175,"\Xb0"=>176,"\Xb1"=>177,"\Xb2"=>178,"\Xb3"=>179,"\Xb4"=>180,"\Xb5"=>181,"\Xb6"=>182,"\Xb7"=>183,"\Xb8"=>184,"\Xb9"=>185,"\Xba"=>186,"\Xbb"=>187,"\Xbc"=>188,"\Xbd"=>189,"\Xbe"=>190,"\Xbf"=>191,"\Xc0"=>192,"\Xc1"=>193,"\Xc2"=>194,"\Xc3"=>195,"\Xc4"=>196,"\Xc5"=>197,"\Xc6"=>198,"\Xc7"=>199,"\Xc8"=>200,"\Xc9"=>201,"\Xca"=>202,"\Xcb"=>203,"\Xcc"=>204,"\Xcd"=>205,"\Xce"=>206,"\Xcf"=>207,"\Xd0"=>208,"\Xd1"=>209,"\Xd2"=>210,"\Xd3"=>211,"\Xd4"=>212,"\Xd5"=>213,"\Xd6"=>214,"\Xd7"=>215,"\Xd8"=>216,"\Xd9"=>217,"\Xda"=>218,"\Xdb"=>219,"\Xdc"=>220,"\Xdd"=>221,"\Xde"=>222,"\Xdf"=>223,"\Xe0"=>224,"\Xe1"=>225,"\Xe2"=>226,"\Xe3"=>227,"\Xe4"=>228,"\Xe5"=>229,"\Xe6"=>230,"\Xe7"=>231,"\Xe8"=>232,"\Xe9"=>233,"\Xea"=>234,"\Xeb"=>235,"\Xec"=>236,"\Xed"=>237,"\Xee"=>238,"\Xef"=>239,"\Xf0"=>240,"\Xf1"=>241,"\Xf2"=>242,"\Xf3"=>243,"\Xf4"=>244,"\Xf5"=>245,"\Xf6"=>246,"\Xf7"=>247,"\Xf8"=>248,"\Xf9"=>249,"\Xfa"=>250,"\Xfb"=>251,"\Xfc"=>252,"\Xfd"=>253,"\Xfe"=>254,"\Xff"=>255,"\X00"=>0];
9
10
/** @codeCoverageIgnore */
11
function toFloat(int $x): float
12
{
13
    $frac = $x & 0x7fffff;
14
    $expt = ($x >> 23) & 0xff;
15
    $sign = $x >> 31 ? -1 : 1;
16
17
    if ($expt === 0) {
18
        if ($frac === 0) {
19
            return $sign * 0;
20
        }
21
        return $sign * $frac * 2 ** -149;
22
    }
23
    if ($expt === 0xff) {
24
        if ($frac === 0) {
25
            return $sign * INF;
26
        }
27
        return NAN;
28
    }
29
30
    return $sign * 2 ** ($expt - 127) * (1 + $frac * 2 ** -23);
31
}
32
33
/** @codeCoverageIgnore */
34
function toDouble(int $x, int $y): float
35
{
36
    $frac = $x + 0x100000000 * ($y & 0xFFFFF);
37
    $expt = ($y >> 20) & 0x7ff;
38
    $sign = $y >> 31 ? -1 : 1;
39
40
    if ($expt === 0) {
41
        if ($frac === 0) {
42
            return $sign * 0;
43
        }
44
        return $sign * $frac * 2 ** -1074;
45
    }
46
    if ($expt === 0x7ff) {
47
        if ($frac === 0) {
48
            return $sign * INF;
49
        }
50
        return NAN;
51
    }
52
53
    return $sign * 2 ** ($expt - 1023) * (1 + $frac * 2 ** -52);
54
}
55