Subversion-Projekte lars-tiefland.laravel_shop

Revision

Zur aktuellen Revision | Details | Letzte Änderung | Log anzeigen | RSS feed

Revision Autor Zeilennr. Zeile
148 lars 1
<?php
2
 
3
declare(strict_types=1);
4
 
5
namespace Brick\Math\Internal\Calculator;
6
 
7
use Brick\Math\Internal\Calculator;
8
 
9
/**
10
 * Calculator implementation built around the GMP library.
11
 *
12
 * @internal
13
 *
14
 * @psalm-immutable
15
 */
16
class GmpCalculator extends Calculator
17
{
18
    /**
19
     * {@inheritdoc}
20
     */
21
    public function add(string $a, string $b) : string
22
    {
23
        return \gmp_strval(\gmp_add($a, $b));
24
    }
25
 
26
    /**
27
     * {@inheritdoc}
28
     */
29
    public function sub(string $a, string $b) : string
30
    {
31
        return \gmp_strval(\gmp_sub($a, $b));
32
    }
33
 
34
    /**
35
     * {@inheritdoc}
36
     */
37
    public function mul(string $a, string $b) : string
38
    {
39
        return \gmp_strval(\gmp_mul($a, $b));
40
    }
41
 
42
    /**
43
     * {@inheritdoc}
44
     */
45
    public function divQ(string $a, string $b) : string
46
    {
47
        return \gmp_strval(\gmp_div_q($a, $b));
48
    }
49
 
50
    /**
51
     * {@inheritdoc}
52
     */
53
    public function divR(string $a, string $b) : string
54
    {
55
        return \gmp_strval(\gmp_div_r($a, $b));
56
    }
57
 
58
    /**
59
     * {@inheritdoc}
60
     */
61
    public function divQR(string $a, string $b) : array
62
    {
63
        [$q, $r] = \gmp_div_qr($a, $b);
64
 
65
        return [
66
            \gmp_strval($q),
67
            \gmp_strval($r)
68
        ];
69
    }
70
 
71
    /**
72
     * {@inheritdoc}
73
     */
74
    public function pow(string $a, int $e) : string
75
    {
76
        return \gmp_strval(\gmp_pow($a, $e));
77
    }
78
 
79
    /**
80
     * {@inheritdoc}
81
     */
82
    public function modInverse(string $x, string $m) : ?string
83
    {
84
        $result = \gmp_invert($x, $m);
85
 
86
        if ($result === false) {
87
            return null;
88
        }
89
 
90
        return \gmp_strval($result);
91
    }
92
 
93
    /**
94
     * {@inheritdoc}
95
     */
96
    public function modPow(string $base, string $exp, string $mod) : string
97
    {
98
        return \gmp_strval(\gmp_powm($base, $exp, $mod));
99
    }
100
 
101
    /**
102
     * {@inheritdoc}
103
     */
104
    public function gcd(string $a, string $b) : string
105
    {
106
        return \gmp_strval(\gmp_gcd($a, $b));
107
    }
108
 
109
    /**
110
     * {@inheritdoc}
111
     */
112
    public function fromBase(string $number, int $base) : string
113
    {
114
        return \gmp_strval(\gmp_init($number, $base));
115
    }
116
 
117
    /**
118
     * {@inheritdoc}
119
     */
120
    public function toBase(string $number, int $base) : string
121
    {
122
        return \gmp_strval($number, $base);
123
    }
124
 
125
    /**
126
     * {@inheritdoc}
127
     */
128
    public function and(string $a, string $b) : string
129
    {
130
        return \gmp_strval(\gmp_and($a, $b));
131
    }
132
 
133
    /**
134
     * {@inheritdoc}
135
     */
136
    public function or(string $a, string $b) : string
137
    {
138
        return \gmp_strval(\gmp_or($a, $b));
139
    }
140
 
141
    /**
142
     * {@inheritdoc}
143
     */
144
    public function xor(string $a, string $b) : string
145
    {
146
        return \gmp_strval(\gmp_xor($a, $b));
147
    }
148
 
149
    /**
150
     * {@inheritDoc}
151
     */
152
    public function sqrt(string $n) : string
153
    {
154
        return \gmp_strval(\gmp_sqrt($n));
155
    }
156
}