squiggle/src/utility/lib/Functions.re

37 lines
1.3 KiB
ReasonML
Raw Normal View History

2020-02-25 06:16:14 +00:00
exception RangeWrong(string);
2020-02-21 13:54:39 +00:00
let interpolate =
(xMin: float, xMax: float, yMin: float, yMax: float, xIntended: float)
: float => {
let minProportion = (xMax -. xIntended) /. (xMax -. xMin);
let maxProportion = (xIntended -. xMin) /. (xMax -. xMin);
yMin *. minProportion +. yMax *. maxProportion;
};
2020-02-21 14:05:42 +00:00
let sum = Belt.Array.reduce(_, 0., (i, j) => i +. j);
let mean = a => sum(a) /. (Array.length(a) |> float_of_int);
2020-02-25 07:10:21 +00:00
let min = a => Belt.Array.reduce(a, a[0], (i, j) => i < j ? i : j);
2020-02-25 07:38:08 +00:00
let max = a => Belt.Array.reduce(a, a[0], (i, j) => i > j ? i : j);
2020-02-25 09:45:41 +00:00
let up = (a, b) =>
Array.make(b - a + 1, a)
|> Array.mapi((i, c) => c + i)
|> Belt.Array.map(_, float_of_int);
2020-02-25 07:59:01 +00:00
let down = (a, b) =>
2020-02-25 09:45:41 +00:00
Array.make(a - b + 1, a)
|> Array.mapi((i, c) => c - i)
|> Belt.Array.map(_, float_of_int);
2020-02-25 06:16:14 +00:00
let range = (min: float, max: float, n: int): array(float) => {
switch (n) {
| 0 => [||]
| 1 => [|min|]
| 2 => [|min, max|]
| _ when min == max => Belt.Array.make(n, min)
| _ when n < 0 => raise(RangeWrong("n is less then zero"))
| _ when min > max => raise(RangeWrong("Min values is less then max"))
| _ =>
2020-02-25 07:01:40 +00:00
let diff = (max -. min) /. Belt.Float.fromInt(n - 1);
Belt.Array.makeBy(n, i => {min +. Belt.Float.fromInt(i) *. diff});
2020-02-25 06:16:14 +00:00
};
};
2020-02-25 07:01:40 +00:00
let random = Js.Math.random_int;