Subversion-Projekte lars-tiefland.laravel_shop

Revision

Revision 148 | Details | Vergleich mit vorheriger | 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
    public function add(string $a, string $b) : string
19
    {
20
        return \gmp_strval(\gmp_add($a, $b));
21
    }
22
 
23
    public function sub(string $a, string $b) : string
24
    {
25
        return \gmp_strval(\gmp_sub($a, $b));
26
    }
27
 
28
    public function mul(string $a, string $b) : string
29
    {
30
        return \gmp_strval(\gmp_mul($a, $b));
31
    }
32
 
33
    public function divQ(string $a, string $b) : string
34
    {
35
        return \gmp_strval(\gmp_div_q($a, $b));
36
    }
37
 
38
    public function divR(string $a, string $b) : string
39
    {
40
        return \gmp_strval(\gmp_div_r($a, $b));
41
    }
42
 
43
    public function divQR(string $a, string $b) : array
44
    {
45
        [$q, $r] = \gmp_div_qr($a, $b);
46
 
47
        return [
48
            \gmp_strval($q),
49
            \gmp_strval($r)
50
        ];
51
    }
52
 
53
    public function pow(string $a, int $e) : string
54
    {
55
        return \gmp_strval(\gmp_pow($a, $e));
56
    }
57
 
58
    public function modInverse(string $x, string $m) : ?string
59
    {
60
        $result = \gmp_invert($x, $m);
61
 
62
        if ($result === false) {
63
            return null;
64
        }
65
 
66
        return \gmp_strval($result);
67
    }
68
 
69
    public function modPow(string $base, string $exp, string $mod) : string
70
    {
71
        return \gmp_strval(\gmp_powm($base, $exp, $mod));
72
    }
73
 
74
    public function gcd(string $a, string $b) : string
75
    {
76
        return \gmp_strval(\gmp_gcd($a, $b));
77
    }
78
 
79
    public function fromBase(string $number, int $base) : string
80
    {
81
        return \gmp_strval(\gmp_init($number, $base));
82
    }
83
 
84
    public function toBase(string $number, int $base) : string
85
    {
86
        return \gmp_strval($number, $base);
87
    }
88
 
89
    public function and(string $a, string $b) : string
90
    {
91
        return \gmp_strval(\gmp_and($a, $b));
92
    }
93
 
94
    public function or(string $a, string $b) : string
95
    {
96
        return \gmp_strval(\gmp_or($a, $b));
97
    }
98
 
99
    public function xor(string $a, string $b) : string
100
    {
101
        return \gmp_strval(\gmp_xor($a, $b));
102
    }
103
 
104
    public function sqrt(string $n) : string
105
    {
106
        return \gmp_strval(\gmp_sqrt($n));
107
    }
108
}