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 bcmath library.
11
 *
12
 * @internal
13
 *
14
 * @psalm-immutable
15
 */
16
class BcMathCalculator extends Calculator
17
{
18
    public function add(string $a, string $b) : string
19
    {
20
        return \bcadd($a, $b, 0);
21
    }
22
 
23
    public function sub(string $a, string $b) : string
24
    {
25
        return \bcsub($a, $b, 0);
26
    }
27
 
28
    public function mul(string $a, string $b) : string
29
    {
30
        return \bcmul($a, $b, 0);
31
    }
32
 
33
    public function divQ(string $a, string $b) : string
34
    {
35
        return \bcdiv($a, $b, 0);
36
    }
37
 
38
    /**
39
     * @psalm-suppress InvalidNullableReturnType
40
     * @psalm-suppress NullableReturnStatement
41
     */
42
    public function divR(string $a, string $b) : string
43
    {
399 lars 44
        return \bcmod($a, $b, 0);
148 lars 45
    }
46
 
47
    public function divQR(string $a, string $b) : array
48
    {
49
        $q = \bcdiv($a, $b, 0);
399 lars 50
        $r = \bcmod($a, $b, 0);
148 lars 51
 
52
        assert($r !== null);
53
 
54
        return [$q, $r];
55
    }
56
 
57
    public function pow(string $a, int $e) : string
58
    {
59
        return \bcpow($a, (string) $e, 0);
60
    }
61
 
62
    public function modPow(string $base, string $exp, string $mod) : string
63
    {
64
        return \bcpowmod($base, $exp, $mod, 0);
65
    }
66
 
67
    /**
399 lars 68
     * @psalm-suppress InvalidNullableReturnType
69
     * @psalm-suppress NullableReturnStatement
148 lars 70
     */
71
    public function sqrt(string $n) : string
72
    {
73
        return \bcsqrt($n, 0);
74
    }
75
}