zef:antononcube

# Math::SpecialFunctions

Raku package for mathematical special functions.

## Installation

From Zef ecosytem:

``````zef install Math::SpecialFunctions
``````

From GitHub:

``````zef install https://github.com/antononcube/Raku-Math-SpecialFunctions.git
``````

## Usage examples

The subsections below show example usage for the currently implemented functions.

### Factorial

```use Math::SpecialFunctions;
.say for (^11) Z=> (^11)».&factorial
```
``````# 0 => 1
# 1 => 1
# 2 => 2
# 3 => 6
# 4 => 24
# 5 => 120
# 6 => 720
# 7 => 5040
# 8 => 40320
# 9 => 362880
# 10 => 3628800
``````

The function `factorial` seems reasonably fast:

```my \$tstart = now;
for ^1_000 { factorial(\$_ * (1..6).pick ) }
my \$tend = now;
say "Total time {\$tend - \$tstart}";
say "Average time {(\$tend - \$tstart) / 1_000}";
```
``````# Total time 0.900635487
# Average time 0.000900635487
``````

### Binomial

Pascal's triangle:

```for (^6) -> \$n {
say do for (0..\$n) -> \$k {
binomial(\$n, \$k), " "
}.join
}
```
``````# 1
# 1  1
# 1  2  1
# 1  3  3  1
# 1  4  6  4  1
# 1  5  10  10  5  1
``````

### Bernoulli-B

• For odd `n`, the Bernoulli numbers are equal to `0`, except `B[1] = -1/2`.

• `bernoulli-b` can be evaluated to arbitrary numerical precision. (Uses `FatRat`.)

```bernoulli-b(60).nude
```
``````# (-1215233140483755572040304994079820246041491 56786730)
``````

### Gamma function

• The implementation uses approximation formula with machine numbers.
• Both function names `gamma` and `Γ` can be used.
• The property `Γ(z + 1) = z * Γ(z)` holds.

Synonyms demo:

```[gamma(0.3), Γ(0.3)]
```
``````# [2.991568987687589 2.991568987687589]
``````

Show that the property above holds:

```gamma(2.3) - 1.3 * gamma(1.3)
```
``````# 0
``````