2023-01-04 19:39:01 +00:00
|
|
|
# gleam-community/maths
|
2022-12-23 14:26:58 +00:00
|
|
|
|
2023-01-04 19:39:01 +00:00
|
|
|
[](https://hex.pm/packages/gleam_community_maths)
|
|
|
|
[](https://hexdocs.pm/gleam_community_maths/)
|
2022-12-23 14:26:58 +00:00
|
|
|
|
2023-01-04 19:39:01 +00:00
|
|
|
A basic mathematics library that contains some of the most fundamental mathematics functions and utilities.
|
2022-12-23 14:26:58 +00:00
|
|
|
|
2023-01-04 19:39:01 +00:00
|
|
|
The library supports both targets: Erlang and JavaScript.
|
|
|
|
|
|
|
|
## Quickstart
|
|
|
|
|
|
|
|
```gleam
|
2024-08-16 23:13:57 +00:00
|
|
|
import gleam/float
|
|
|
|
import gleam/iterator
|
|
|
|
import gleam/option.{Some}
|
2023-09-17 12:15:10 +00:00
|
|
|
import gleam_community/maths/arithmetics
|
2024-08-16 23:13:57 +00:00
|
|
|
import gleam_community/maths/combinatorics.{WithoutRepetitions}
|
2023-09-17 12:21:33 +00:00
|
|
|
import gleam_community/maths/elementary
|
2023-09-17 12:15:10 +00:00
|
|
|
import gleam_community/maths/piecewise
|
2023-09-17 13:23:01 +00:00
|
|
|
import gleam_community/maths/predicates
|
2024-08-16 23:13:57 +00:00
|
|
|
import gleeunit/should
|
2023-01-04 19:39:01 +00:00
|
|
|
|
2024-08-16 23:13:57 +00:00
|
|
|
pub fn example() {
|
2023-01-04 19:39:01 +00:00
|
|
|
// Evaluate the sine function
|
2024-08-16 23:13:57 +00:00
|
|
|
let result = elementary.sin(elementary.pi())
|
|
|
|
|
|
|
|
// Set the relative and absolute tolerance
|
|
|
|
let assert Ok(absolute_tol) = elementary.power(10.0, -6.0)
|
|
|
|
let relative_tol = 0.0
|
|
|
|
|
|
|
|
// Check that the value is very close to 0.0
|
|
|
|
// That is, if 'result' is within +/- 10^(-6)
|
|
|
|
predicates.is_close(result, 0.0, relative_tol, absolute_tol)
|
|
|
|
|> should.be_true()
|
2023-01-04 19:39:01 +00:00
|
|
|
|
|
|
|
// Find the greatest common divisor
|
2023-09-17 12:15:10 +00:00
|
|
|
arithmetics.gcd(54, 24)
|
2024-08-16 23:13:57 +00:00
|
|
|
|> should.equal(6)
|
2023-01-04 19:39:01 +00:00
|
|
|
|
|
|
|
// Find the minimum and maximum of a list
|
2023-09-17 12:15:10 +00:00
|
|
|
piecewise.extrema([10.0, 3.0, 50.0, 20.0, 3.0], float.compare)
|
2024-08-16 23:13:57 +00:00
|
|
|
|> should.equal(Ok(#(3.0, 50.0)))
|
2023-09-17 12:15:10 +00:00
|
|
|
|
2023-09-17 12:15:35 +00:00
|
|
|
// Determine if a number is fractional
|
2023-09-17 13:23:01 +00:00
|
|
|
predicates.is_fractional(0.3333)
|
2024-08-16 23:13:57 +00:00
|
|
|
|> should.equal(True)
|
2023-09-17 12:15:10 +00:00
|
|
|
|
2024-08-16 23:13:57 +00:00
|
|
|
// Generate all k = 2 combinations of [1, 2, 3]
|
|
|
|
let assert Ok(combinations) =
|
|
|
|
combinatorics.list_combination([1, 2, 3], 2, Some(WithoutRepetitions))
|
|
|
|
combinations
|
|
|
|
|> iterator.to_list()
|
|
|
|
|> should.equal([[1, 2], [1, 3], [2, 3]])
|
2023-01-04 19:39:01 +00:00
|
|
|
}
|
2024-08-16 23:13:57 +00:00
|
|
|
|
2022-12-23 14:26:58 +00:00
|
|
|
```
|
|
|
|
|
|
|
|
## Installation
|
|
|
|
|
2023-01-04 19:39:01 +00:00
|
|
|
`gleam_community` packages are published to [hex.pm](https://hex.pm/packages/gleam_community_maths)
|
|
|
|
with the prefix `gleam_community_`. You can add them to your Gleam projects directly:
|
2022-12-23 14:26:58 +00:00
|
|
|
|
|
|
|
```sh
|
2023-01-04 19:39:01 +00:00
|
|
|
gleam add gleam_community_maths
|
2023-01-22 21:39:10 +00:00
|
|
|
```
|