create-mendix-widget-gleam 2.0.14 → 2.0.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/package.json +5 -1
- package/src/index.mjs +32 -12
- package/template/gleam.toml +1 -1
- package/tui/build/dev/javascript/etch/_gleam_artefacts/etch@command.cache +0 -0
- package/tui/build/dev/javascript/etch/_gleam_artefacts/etch@command.cache_inline +0 -0
- package/tui/build/dev/javascript/etch/_gleam_artefacts/etch@command.cache_meta +0 -0
- package/tui/build/dev/javascript/etch/_gleam_artefacts/etch@cursor.cache +0 -0
- package/tui/build/dev/javascript/etch/_gleam_artefacts/etch@cursor.cache_inline +0 -0
- package/tui/build/dev/javascript/etch/_gleam_artefacts/etch@cursor.cache_meta +0 -0
- package/tui/build/dev/javascript/etch/_gleam_artefacts/etch@event.cache +0 -0
- package/tui/build/dev/javascript/etch/_gleam_artefacts/etch@event.cache_inline +0 -0
- package/tui/build/dev/javascript/etch/_gleam_artefacts/etch@event.cache_meta +0 -0
- package/tui/build/dev/javascript/etch/_gleam_artefacts/etch@internal@consts.cache +0 -0
- package/tui/build/dev/javascript/etch/_gleam_artefacts/etch@internal@consts.cache_inline +0 -0
- package/tui/build/dev/javascript/etch/_gleam_artefacts/etch@internal@consts.cache_meta +0 -0
- package/tui/build/dev/javascript/etch/_gleam_artefacts/etch@stdout.cache +0 -0
- package/tui/build/dev/javascript/etch/_gleam_artefacts/etch@stdout.cache_inline +0 -0
- package/tui/build/dev/javascript/etch/_gleam_artefacts/etch@stdout.cache_meta +0 -0
- package/tui/build/dev/javascript/etch/_gleam_artefacts/etch@style.cache +0 -0
- package/tui/build/dev/javascript/etch/_gleam_artefacts/etch@style.cache_inline +0 -0
- package/tui/build/dev/javascript/etch/_gleam_artefacts/etch@style.cache_meta +0 -0
- package/tui/build/dev/javascript/etch/_gleam_artefacts/etch@terminal.cache +0 -0
- package/tui/build/dev/javascript/etch/_gleam_artefacts/etch@terminal.cache_inline +0 -0
- package/tui/build/dev/javascript/etch/_gleam_artefacts/etch@terminal.cache_meta +0 -0
- package/tui/build/dev/javascript/etch/etch/command.mjs +479 -0
- package/tui/build/dev/javascript/etch/etch/cursor.mjs +164 -0
- package/tui/build/dev/javascript/etch/etch/event.mjs +2399 -0
- package/tui/build/dev/javascript/etch/etch/internal/consts.mjs +3 -0
- package/tui/build/dev/javascript/etch/etch/stdout.mjs +375 -0
- package/tui/build/dev/javascript/etch/etch/style.mjs +741 -0
- package/tui/build/dev/javascript/etch/etch/terminal.mjs +137 -0
- package/tui/build/dev/javascript/etch/gleam.mjs +1 -0
- package/tui/build/dev/javascript/etch/input/event_ffi.erl +73 -0
- package/tui/build/dev/javascript/etch/input/input_ffi.mjs +192 -0
- package/tui/build/dev/javascript/etch/input/signal_handler.erl +33 -0
- package/tui/build/dev/javascript/etch/terminal/terminal_ffi.erl +22 -0
- package/tui/build/dev/javascript/etch/terminal/terminal_ffi.mjs +37 -0
- package/tui/build/dev/javascript/etch/terminal/tty_state.erl +29 -0
- package/tui/build/dev/javascript/gleam_erlang/_gleam_artefacts/gleam@erlang@application.cache +0 -0
- package/tui/build/dev/javascript/gleam_erlang/_gleam_artefacts/gleam@erlang@application.cache_inline +0 -0
- package/tui/build/dev/javascript/gleam_erlang/_gleam_artefacts/gleam@erlang@application.cache_meta +0 -0
- package/tui/build/dev/javascript/gleam_erlang/_gleam_artefacts/gleam@erlang@atom.cache +0 -0
- package/tui/build/dev/javascript/gleam_erlang/_gleam_artefacts/gleam@erlang@atom.cache_inline +0 -0
- package/tui/build/dev/javascript/gleam_erlang/_gleam_artefacts/gleam@erlang@atom.cache_meta +0 -0
- package/tui/build/dev/javascript/gleam_erlang/_gleam_artefacts/gleam@erlang@charlist.cache +0 -0
- package/tui/build/dev/javascript/gleam_erlang/_gleam_artefacts/gleam@erlang@charlist.cache_inline +0 -0
- package/tui/build/dev/javascript/gleam_erlang/_gleam_artefacts/gleam@erlang@charlist.cache_meta +0 -0
- package/tui/build/dev/javascript/gleam_erlang/_gleam_artefacts/gleam@erlang@node.cache +0 -0
- package/tui/build/dev/javascript/gleam_erlang/_gleam_artefacts/gleam@erlang@node.cache_inline +0 -0
- package/tui/build/dev/javascript/gleam_erlang/_gleam_artefacts/gleam@erlang@node.cache_meta +0 -0
- package/tui/build/dev/javascript/gleam_erlang/_gleam_artefacts/gleam@erlang@port.cache +0 -0
- package/tui/build/dev/javascript/gleam_erlang/_gleam_artefacts/gleam@erlang@port.cache_inline +0 -0
- package/tui/build/dev/javascript/gleam_erlang/_gleam_artefacts/gleam@erlang@port.cache_meta +0 -0
- package/tui/build/dev/javascript/gleam_erlang/_gleam_artefacts/gleam@erlang@process.cache +0 -0
- package/tui/build/dev/javascript/gleam_erlang/_gleam_artefacts/gleam@erlang@process.cache_inline +0 -0
- package/tui/build/dev/javascript/gleam_erlang/_gleam_artefacts/gleam@erlang@process.cache_meta +0 -0
- package/tui/build/dev/javascript/gleam_erlang/_gleam_artefacts/gleam@erlang@reference.cache +0 -0
- package/tui/build/dev/javascript/gleam_erlang/_gleam_artefacts/gleam@erlang@reference.cache_inline +0 -0
- package/tui/build/dev/javascript/gleam_erlang/_gleam_artefacts/gleam@erlang@reference.cache_meta +0 -0
- package/tui/build/dev/javascript/gleam_erlang/gleam/erlang/application.mjs +38 -0
- package/tui/build/dev/javascript/gleam_erlang/gleam/erlang/atom.mjs +2 -0
- package/tui/build/dev/javascript/gleam_erlang/gleam/erlang/charlist.mjs +1 -0
- package/tui/build/dev/javascript/gleam_erlang/gleam/erlang/node.mjs +12 -0
- package/tui/build/dev/javascript/gleam_erlang/gleam/erlang/port.mjs +1 -0
- package/tui/build/dev/javascript/gleam_erlang/gleam/erlang/process.mjs +161 -0
- package/tui/build/dev/javascript/gleam_erlang/gleam/erlang/reference.mjs +1 -0
- package/tui/build/dev/javascript/gleam_erlang/gleam.mjs +1 -0
- package/tui/build/dev/javascript/gleam_erlang/gleam@erlang@application.erl +43 -0
- package/tui/build/dev/javascript/gleam_erlang/gleam@erlang@atom.erl +94 -0
- package/tui/build/dev/javascript/gleam_erlang/gleam@erlang@charlist.erl +42 -0
- package/tui/build/dev/javascript/gleam_erlang/gleam@erlang@node.erl +80 -0
- package/tui/build/dev/javascript/gleam_erlang/gleam@erlang@port.erl +8 -0
- package/tui/build/dev/javascript/gleam_erlang/gleam@erlang@process.erl +868 -0
- package/tui/build/dev/javascript/gleam_erlang/gleam@erlang@reference.erl +21 -0
- package/tui/build/dev/javascript/gleam_erlang/gleam_erlang_ffi.erl +164 -0
- package/tui/build/dev/javascript/gleam_javascript/_gleam_artefacts/gleam@javascript@array.cache +0 -0
- package/tui/build/dev/javascript/gleam_javascript/_gleam_artefacts/gleam@javascript@array.cache_inline +0 -0
- package/tui/build/dev/javascript/gleam_javascript/_gleam_artefacts/gleam@javascript@array.cache_meta +0 -0
- package/tui/build/dev/javascript/gleam_javascript/_gleam_artefacts/gleam@javascript@promise.cache +0 -0
- package/tui/build/dev/javascript/gleam_javascript/_gleam_artefacts/gleam@javascript@promise.cache_inline +0 -0
- package/tui/build/dev/javascript/gleam_javascript/_gleam_artefacts/gleam@javascript@promise.cache_meta +0 -0
- package/tui/build/dev/javascript/gleam_javascript/_gleam_artefacts/gleam@javascript@symbol.cache +0 -0
- package/tui/build/dev/javascript/gleam_javascript/_gleam_artefacts/gleam@javascript@symbol.cache_inline +0 -0
- package/tui/build/dev/javascript/gleam_javascript/_gleam_artefacts/gleam@javascript@symbol.cache_meta +0 -0
- package/tui/build/dev/javascript/gleam_javascript/gleam/javascript/array.mjs +24 -0
- package/tui/build/dev/javascript/gleam_javascript/gleam/javascript/promise.mjs +105 -0
- package/tui/build/dev/javascript/gleam_javascript/gleam/javascript/symbol.mjs +7 -0
- package/tui/build/dev/javascript/gleam_javascript/gleam.mjs +1 -0
- package/tui/build/dev/javascript/gleam_javascript/gleam_javascript_ffi.mjs +133 -0
- package/tui/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@bit_array.cache +0 -0
- package/tui/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@bit_array.cache_inline +0 -0
- package/tui/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@bit_array.cache_meta +0 -0
- package/tui/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@bool.cache +0 -0
- package/tui/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@bool.cache_inline +0 -0
- package/tui/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@bool.cache_meta +0 -0
- package/tui/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@bytes_tree.cache +0 -0
- package/tui/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@bytes_tree.cache_inline +0 -0
- package/tui/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@bytes_tree.cache_meta +0 -0
- package/tui/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@dict.cache +0 -0
- package/tui/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@dict.cache_inline +0 -0
- package/tui/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@dict.cache_meta +0 -0
- package/tui/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@dynamic.cache +0 -0
- package/tui/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@dynamic.cache_inline +0 -0
- package/tui/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@dynamic.cache_meta +0 -0
- package/tui/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@dynamic@decode.cache +0 -0
- package/tui/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@dynamic@decode.cache_inline +0 -0
- package/tui/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@dynamic@decode.cache_meta +0 -0
- package/tui/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@float.cache +0 -0
- package/tui/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@float.cache_inline +0 -0
- package/tui/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@float.cache_meta +0 -0
- package/tui/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@function.cache +0 -0
- package/tui/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@function.cache_inline +0 -0
- package/tui/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@function.cache_meta +0 -0
- package/tui/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@int.cache +0 -0
- package/tui/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@int.cache_inline +0 -0
- package/tui/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@int.cache_meta +0 -0
- package/tui/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@io.cache +0 -0
- package/tui/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@io.cache_inline +0 -0
- package/tui/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@io.cache_meta +0 -0
- package/tui/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@list.cache +0 -0
- package/tui/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@list.cache_inline +0 -0
- package/tui/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@list.cache_meta +0 -0
- package/tui/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@option.cache +0 -0
- package/tui/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@option.cache_inline +0 -0
- package/tui/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@option.cache_meta +0 -0
- package/tui/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@order.cache +0 -0
- package/tui/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@order.cache_inline +0 -0
- package/tui/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@order.cache_meta +0 -0
- package/tui/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@pair.cache +0 -0
- package/tui/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@pair.cache_inline +0 -0
- package/tui/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@pair.cache_meta +0 -0
- package/tui/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@result.cache +0 -0
- package/tui/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@result.cache_inline +0 -0
- package/tui/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@result.cache_meta +0 -0
- package/tui/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@set.cache +0 -0
- package/tui/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@set.cache_inline +0 -0
- package/tui/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@set.cache_meta +0 -0
- package/tui/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@string.cache +0 -0
- package/tui/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@string.cache_inline +0 -0
- package/tui/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@string.cache_meta +0 -0
- package/tui/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@string_tree.cache +0 -0
- package/tui/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@string_tree.cache_inline +0 -0
- package/tui/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@string_tree.cache_meta +0 -0
- package/tui/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@uri.cache +0 -0
- package/tui/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@uri.cache_inline +0 -0
- package/tui/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@uri.cache_meta +0 -0
- package/tui/build/dev/javascript/gleam_stdlib/dict.mjs +710 -0
- package/tui/build/dev/javascript/gleam_stdlib/gleam/bit_array.mjs +286 -0
- package/tui/build/dev/javascript/gleam_stdlib/gleam/bool.mjs +295 -0
- package/tui/build/dev/javascript/gleam_stdlib/gleam/bytes_tree.mjs +225 -0
- package/tui/build/dev/javascript/gleam_stdlib/gleam/dict.mjs +455 -0
- package/tui/build/dev/javascript/gleam_stdlib/gleam/dynamic/decode.mjs +993 -0
- package/tui/build/dev/javascript/gleam_stdlib/gleam/dynamic.mjs +35 -0
- package/tui/build/dev/javascript/gleam_stdlib/gleam/float.mjs +528 -0
- package/tui/build/dev/javascript/gleam_stdlib/gleam/function.mjs +6 -0
- package/tui/build/dev/javascript/gleam_stdlib/gleam/int.mjs +764 -0
- package/tui/build/dev/javascript/gleam_stdlib/gleam/io.mjs +8 -0
- package/tui/build/dev/javascript/gleam_stdlib/gleam/list.mjs +3063 -0
- package/tui/build/dev/javascript/gleam_stdlib/gleam/option.mjs +386 -0
- package/tui/build/dev/javascript/gleam_stdlib/gleam/order.mjs +166 -0
- package/tui/build/dev/javascript/gleam_stdlib/gleam/pair.mjs +96 -0
- package/tui/build/dev/javascript/gleam_stdlib/gleam/result.mjs +448 -0
- package/tui/build/dev/javascript/gleam_stdlib/gleam/set.mjs +413 -0
- package/tui/build/dev/javascript/gleam_stdlib/gleam/string.mjs +695 -0
- package/tui/build/dev/javascript/gleam_stdlib/gleam/string_tree.mjs +128 -0
- package/tui/build/dev/javascript/gleam_stdlib/gleam/uri.mjs +1151 -0
- package/tui/build/dev/javascript/gleam_stdlib/gleam.mjs +1 -0
- package/tui/build/dev/javascript/gleam_stdlib/gleam@bit_array.erl +347 -0
- package/tui/build/dev/javascript/gleam_stdlib/gleam@bool.erl +334 -0
- package/tui/build/dev/javascript/gleam_stdlib/gleam@bytes_tree.erl +211 -0
- package/tui/build/dev/javascript/gleam_stdlib/gleam@dict.erl +513 -0
- package/tui/build/dev/javascript/gleam_stdlib/gleam@dynamic.erl +105 -0
- package/tui/build/dev/javascript/gleam_stdlib/gleam@dynamic@decode.erl +1114 -0
- package/tui/build/dev/javascript/gleam_stdlib/gleam@float.erl +711 -0
- package/tui/build/dev/javascript/gleam_stdlib/gleam@function.erl +18 -0
- package/tui/build/dev/javascript/gleam_stdlib/gleam@int.erl +972 -0
- package/tui/build/dev/javascript/gleam_stdlib/gleam@io.erl +76 -0
- package/tui/build/dev/javascript/gleam_stdlib/gleam@list.erl +2735 -0
- package/tui/build/dev/javascript/gleam_stdlib/gleam@option.erl +381 -0
- package/tui/build/dev/javascript/gleam_stdlib/gleam@order.erl +188 -0
- package/tui/build/dev/javascript/gleam_stdlib/gleam@pair.erl +104 -0
- package/tui/build/dev/javascript/gleam_stdlib/gleam@result.erl +500 -0
- package/tui/build/dev/javascript/gleam_stdlib/gleam@set.erl +430 -0
- package/tui/build/dev/javascript/gleam_stdlib/gleam@string.erl +964 -0
- package/tui/build/dev/javascript/gleam_stdlib/gleam@string_tree.erl +202 -0
- package/tui/build/dev/javascript/gleam_stdlib/gleam@uri.erl +1042 -0
- package/tui/build/dev/javascript/gleam_stdlib/gleam_stdlib.erl +534 -0
- package/tui/build/dev/javascript/gleam_stdlib/gleam_stdlib.mjs +1133 -0
- package/tui/build/dev/javascript/gleam_version +1 -0
- package/tui/build/dev/javascript/prelude.mjs +1575 -0
- package/tui/build/dev/javascript/tui/_gleam_artefacts/tui.cache +0 -0
- package/tui/build/dev/javascript/tui/_gleam_artefacts/tui.cache_inline +0 -0
- package/tui/build/dev/javascript/tui/_gleam_artefacts/tui.cache_meta +0 -0
- package/tui/build/dev/javascript/tui/_gleam_artefacts/tui.cache_warnings +0 -0
- package/tui/build/dev/javascript/tui/_gleam_artefacts/tui@prompt.cache +0 -0
- package/tui/build/dev/javascript/tui/_gleam_artefacts/tui@prompt.cache_inline +0 -0
- package/tui/build/dev/javascript/tui/_gleam_artefacts/tui@prompt.cache_meta +0 -0
- package/tui/build/dev/javascript/tui/_gleam_artefacts/tui@prompt.cache_warnings +0 -0
- package/tui/build/dev/javascript/tui/gleam.mjs +1 -0
- package/tui/build/dev/javascript/tui/tui/prompt.mjs +521 -0
- package/tui/build/dev/javascript/tui/tui.mjs +334 -0
- package/tui/build/dev/javascript/tui/tui_ffi.mjs +32 -0
|
@@ -0,0 +1,711 @@
|
|
|
1
|
+
-module(gleam@float).
|
|
2
|
+
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
|
|
3
|
+
-define(FILEPATH, "src/gleam/float.gleam").
|
|
4
|
+
-export([parse/1, to_string/1, compare/2, min/2, max/2, clamp/3, ceiling/1, floor/1, truncate/1, absolute_value/1, loosely_compare/3, loosely_equals/3, power/2, square_root/1, negate/1, round/1, to_precision/2, sum/1, product/1, random/0, modulo/2, divide/2, add/2, multiply/2, subtract/2, logarithm/1, exponential/1]).
|
|
5
|
+
|
|
6
|
+
-if(?OTP_RELEASE >= 27).
|
|
7
|
+
-define(MODULEDOC(Str), -moduledoc(Str)).
|
|
8
|
+
-define(DOC(Str), -doc(Str)).
|
|
9
|
+
-else.
|
|
10
|
+
-define(MODULEDOC(Str), -compile([])).
|
|
11
|
+
-define(DOC(Str), -compile([])).
|
|
12
|
+
-endif.
|
|
13
|
+
|
|
14
|
+
?MODULEDOC(
|
|
15
|
+
" Functions for working with floats.\n"
|
|
16
|
+
"\n"
|
|
17
|
+
" ## Float representation\n"
|
|
18
|
+
"\n"
|
|
19
|
+
" Floats are represented as 64 bit floating point numbers on both the Erlang\n"
|
|
20
|
+
" and JavaScript runtimes. The floating point behaviour is native to their\n"
|
|
21
|
+
" respective runtimes, so their exact behaviour will be slightly different on\n"
|
|
22
|
+
" the two runtimes.\n"
|
|
23
|
+
"\n"
|
|
24
|
+
" ### Infinity and NaN\n"
|
|
25
|
+
"\n"
|
|
26
|
+
" Under the JavaScript runtime, exceeding the maximum (or minimum)\n"
|
|
27
|
+
" representable value for a floating point value will result in Infinity (or\n"
|
|
28
|
+
" -Infinity). Should you try to divide two infinities you will get NaN as a\n"
|
|
29
|
+
" result.\n"
|
|
30
|
+
"\n"
|
|
31
|
+
" When running on BEAM, exceeding the maximum (or minimum) representable\n"
|
|
32
|
+
" value for a floating point value will raise an error.\n"
|
|
33
|
+
"\n"
|
|
34
|
+
" ## Division by zero\n"
|
|
35
|
+
"\n"
|
|
36
|
+
" Gleam runs on the Erlang virtual machine, which does not follow the IEEE\n"
|
|
37
|
+
" 754 standard for floating point arithmetic and does not have an `Infinity`\n"
|
|
38
|
+
" value. In Erlang division by zero results in a crash, however Gleam does\n"
|
|
39
|
+
" not have partial functions and operators in core so instead division by zero\n"
|
|
40
|
+
" returns zero, a behaviour taken from Pony, Coq, and Lean.\n"
|
|
41
|
+
"\n"
|
|
42
|
+
" This may seem unexpected at first, but it is no less mathematically valid\n"
|
|
43
|
+
" than crashing or returning a special value. Division by zero is undefined\n"
|
|
44
|
+
" in mathematics.\n"
|
|
45
|
+
).
|
|
46
|
+
|
|
47
|
+
-file("src/gleam/float.gleam", 49).
|
|
48
|
+
?DOC(
|
|
49
|
+
" Attempts to parse a string as a `Float`, returning `Error(Nil)` if it was\n"
|
|
50
|
+
" not possible.\n"
|
|
51
|
+
"\n"
|
|
52
|
+
" ## Examples\n"
|
|
53
|
+
"\n"
|
|
54
|
+
" ```gleam\n"
|
|
55
|
+
" assert parse(\"2.3\") == Ok(2.3)\n"
|
|
56
|
+
" ```\n"
|
|
57
|
+
"\n"
|
|
58
|
+
" ```gleam\n"
|
|
59
|
+
" assert parse(\"ABC\") == Error(Nil)\n"
|
|
60
|
+
" ```\n"
|
|
61
|
+
).
|
|
62
|
+
-spec parse(binary()) -> {ok, float()} | {error, nil}.
|
|
63
|
+
parse(String) ->
|
|
64
|
+
gleam_stdlib:parse_float(String).
|
|
65
|
+
|
|
66
|
+
-file("src/gleam/float.gleam", 61).
|
|
67
|
+
?DOC(
|
|
68
|
+
" Returns the string representation of the provided `Float`.\n"
|
|
69
|
+
"\n"
|
|
70
|
+
" ## Examples\n"
|
|
71
|
+
"\n"
|
|
72
|
+
" ```gleam\n"
|
|
73
|
+
" assert to_string(2.3) == \"2.3\"\n"
|
|
74
|
+
" ```\n"
|
|
75
|
+
).
|
|
76
|
+
-spec to_string(float()) -> binary().
|
|
77
|
+
to_string(X) ->
|
|
78
|
+
gleam_stdlib:float_to_string(X).
|
|
79
|
+
|
|
80
|
+
-file("src/gleam/float.gleam", 100).
|
|
81
|
+
?DOC(
|
|
82
|
+
" Compares two `Float`s, returning an `Order`:\n"
|
|
83
|
+
" `Lt` for lower than, `Eq` for equals, or `Gt` for greater than.\n"
|
|
84
|
+
"\n"
|
|
85
|
+
" ## Examples\n"
|
|
86
|
+
"\n"
|
|
87
|
+
" ```gleam\n"
|
|
88
|
+
" assert compare(2.0, 2.3) == Lt\n"
|
|
89
|
+
" ```\n"
|
|
90
|
+
"\n"
|
|
91
|
+
" To handle\n"
|
|
92
|
+
" [Floating Point Imprecision](https://en.wikipedia.org/wiki/Floating-point_arithmetic#Accuracy_problems)\n"
|
|
93
|
+
" you may use [`loosely_compare`](#loosely_compare) instead.\n"
|
|
94
|
+
).
|
|
95
|
+
-spec compare(float(), float()) -> gleam@order:order().
|
|
96
|
+
compare(A, B) ->
|
|
97
|
+
case A =:= B of
|
|
98
|
+
true ->
|
|
99
|
+
eq;
|
|
100
|
+
|
|
101
|
+
false ->
|
|
102
|
+
case A < B of
|
|
103
|
+
true ->
|
|
104
|
+
lt;
|
|
105
|
+
|
|
106
|
+
false ->
|
|
107
|
+
gt
|
|
108
|
+
end
|
|
109
|
+
end.
|
|
110
|
+
|
|
111
|
+
-file("src/gleam/float.gleam", 177).
|
|
112
|
+
?DOC(
|
|
113
|
+
" Compares two `Float`s, returning the smaller of the two.\n"
|
|
114
|
+
"\n"
|
|
115
|
+
" ## Examples\n"
|
|
116
|
+
"\n"
|
|
117
|
+
" ```gleam\n"
|
|
118
|
+
" assert min(2.0, 2.3) == 2.0\n"
|
|
119
|
+
" ```\n"
|
|
120
|
+
).
|
|
121
|
+
-spec min(float(), float()) -> float().
|
|
122
|
+
min(A, B) ->
|
|
123
|
+
case A < B of
|
|
124
|
+
true ->
|
|
125
|
+
A;
|
|
126
|
+
|
|
127
|
+
false ->
|
|
128
|
+
B
|
|
129
|
+
end.
|
|
130
|
+
|
|
131
|
+
-file("src/gleam/float.gleam", 192).
|
|
132
|
+
?DOC(
|
|
133
|
+
" Compares two `Float`s, returning the larger of the two.\n"
|
|
134
|
+
"\n"
|
|
135
|
+
" ## Examples\n"
|
|
136
|
+
"\n"
|
|
137
|
+
" ```gleam\n"
|
|
138
|
+
" assert max(2.0, 2.3) == 2.3\n"
|
|
139
|
+
" ```\n"
|
|
140
|
+
).
|
|
141
|
+
-spec max(float(), float()) -> float().
|
|
142
|
+
max(A, B) ->
|
|
143
|
+
case A > B of
|
|
144
|
+
true ->
|
|
145
|
+
A;
|
|
146
|
+
|
|
147
|
+
false ->
|
|
148
|
+
B
|
|
149
|
+
end.
|
|
150
|
+
|
|
151
|
+
-file("src/gleam/float.gleam", 80).
|
|
152
|
+
?DOC(
|
|
153
|
+
" Restricts a float between two bounds.\n"
|
|
154
|
+
"\n"
|
|
155
|
+
" Note: If the `min` argument is larger than the `max` argument then they\n"
|
|
156
|
+
" will be swapped, so the minimum bound is always lower than the maximum\n"
|
|
157
|
+
" bound.\n"
|
|
158
|
+
"\n"
|
|
159
|
+
"\n"
|
|
160
|
+
" ## Examples\n"
|
|
161
|
+
"\n"
|
|
162
|
+
" ```gleam\n"
|
|
163
|
+
" assert clamp(1.2, min: 1.4, max: 1.6) == 1.4\n"
|
|
164
|
+
" ```\n"
|
|
165
|
+
"\n"
|
|
166
|
+
" ```gleam\n"
|
|
167
|
+
" assert clamp(1.2, min: 1.4, max: 0.6) == 1.2\n"
|
|
168
|
+
" ```\n"
|
|
169
|
+
).
|
|
170
|
+
-spec clamp(float(), float(), float()) -> float().
|
|
171
|
+
clamp(X, Min_bound, Max_bound) ->
|
|
172
|
+
case Min_bound >= Max_bound of
|
|
173
|
+
true ->
|
|
174
|
+
_pipe = X,
|
|
175
|
+
_pipe@1 = min(_pipe, Min_bound),
|
|
176
|
+
max(_pipe@1, Max_bound);
|
|
177
|
+
|
|
178
|
+
false ->
|
|
179
|
+
_pipe@2 = X,
|
|
180
|
+
_pipe@3 = min(_pipe@2, Max_bound),
|
|
181
|
+
max(_pipe@3, Min_bound)
|
|
182
|
+
end.
|
|
183
|
+
|
|
184
|
+
-file("src/gleam/float.gleam", 209).
|
|
185
|
+
?DOC(
|
|
186
|
+
" Rounds the value to the next highest whole number as a `Float`.\n"
|
|
187
|
+
"\n"
|
|
188
|
+
" ## Examples\n"
|
|
189
|
+
"\n"
|
|
190
|
+
" ```gleam\n"
|
|
191
|
+
" assert ceiling(2.3) == 3.0\n"
|
|
192
|
+
" ```\n"
|
|
193
|
+
).
|
|
194
|
+
-spec ceiling(float()) -> float().
|
|
195
|
+
ceiling(X) ->
|
|
196
|
+
math:ceil(X).
|
|
197
|
+
|
|
198
|
+
-file("src/gleam/float.gleam", 221).
|
|
199
|
+
?DOC(
|
|
200
|
+
" Rounds the value to the next lowest whole number as a `Float`.\n"
|
|
201
|
+
"\n"
|
|
202
|
+
" ## Examples\n"
|
|
203
|
+
"\n"
|
|
204
|
+
" ```gleam\n"
|
|
205
|
+
" assert floor(2.3) == 2.0\n"
|
|
206
|
+
" ```\n"
|
|
207
|
+
).
|
|
208
|
+
-spec floor(float()) -> float().
|
|
209
|
+
floor(X) ->
|
|
210
|
+
math:floor(X).
|
|
211
|
+
|
|
212
|
+
-file("src/gleam/float.gleam", 256).
|
|
213
|
+
?DOC(
|
|
214
|
+
" Returns the value as an `Int`, truncating all decimal digits.\n"
|
|
215
|
+
"\n"
|
|
216
|
+
" ## Examples\n"
|
|
217
|
+
"\n"
|
|
218
|
+
" ```gleam\n"
|
|
219
|
+
" assert truncate(2.4343434847383438) == 2\n"
|
|
220
|
+
" ```\n"
|
|
221
|
+
).
|
|
222
|
+
-spec truncate(float()) -> integer().
|
|
223
|
+
truncate(X) ->
|
|
224
|
+
erlang:trunc(X).
|
|
225
|
+
|
|
226
|
+
-file("src/gleam/float.gleam", 302).
|
|
227
|
+
?DOC(
|
|
228
|
+
" Returns the absolute value of the input as a `Float`.\n"
|
|
229
|
+
"\n"
|
|
230
|
+
" ## Examples\n"
|
|
231
|
+
"\n"
|
|
232
|
+
" ```gleam\n"
|
|
233
|
+
" assert absolute_value(-12.5) == 12.5\n"
|
|
234
|
+
" ```\n"
|
|
235
|
+
"\n"
|
|
236
|
+
" ```gleam\n"
|
|
237
|
+
" assert absolute_value(10.2) == 10.2\n"
|
|
238
|
+
" ```\n"
|
|
239
|
+
).
|
|
240
|
+
-spec absolute_value(float()) -> float().
|
|
241
|
+
absolute_value(X) ->
|
|
242
|
+
case X >= +0.0 of
|
|
243
|
+
true ->
|
|
244
|
+
X;
|
|
245
|
+
|
|
246
|
+
false ->
|
|
247
|
+
+0.0 - X
|
|
248
|
+
end.
|
|
249
|
+
|
|
250
|
+
-file("src/gleam/float.gleam", 129).
|
|
251
|
+
?DOC(
|
|
252
|
+
" Compares two `Float`s within a tolerance, returning an `Order`:\n"
|
|
253
|
+
" `Lt` for lower than, `Eq` for equals, or `Gt` for greater than.\n"
|
|
254
|
+
"\n"
|
|
255
|
+
" This function allows Float comparison while handling\n"
|
|
256
|
+
" [Floating Point Imprecision](https://en.wikipedia.org/wiki/Floating-point_arithmetic#Accuracy_problems).\n"
|
|
257
|
+
"\n"
|
|
258
|
+
" Notice: For `Float`s the tolerance won't be exact:\n"
|
|
259
|
+
" `5.3 - 5.0` is not exactly `0.3`.\n"
|
|
260
|
+
"\n"
|
|
261
|
+
" ## Examples\n"
|
|
262
|
+
"\n"
|
|
263
|
+
" ```gleam\n"
|
|
264
|
+
" assert loosely_compare(5.0, with: 5.3, tolerating: 0.5) == Eq\n"
|
|
265
|
+
" ```\n"
|
|
266
|
+
"\n"
|
|
267
|
+
" If you want to check only for equality you may use\n"
|
|
268
|
+
" [`loosely_equals`](#loosely_equals) instead.\n"
|
|
269
|
+
).
|
|
270
|
+
-spec loosely_compare(float(), float(), float()) -> gleam@order:order().
|
|
271
|
+
loosely_compare(A, B, Tolerance) ->
|
|
272
|
+
Difference = absolute_value(A - B),
|
|
273
|
+
case Difference =< Tolerance of
|
|
274
|
+
true ->
|
|
275
|
+
eq;
|
|
276
|
+
|
|
277
|
+
false ->
|
|
278
|
+
compare(A, B)
|
|
279
|
+
end.
|
|
280
|
+
|
|
281
|
+
-file("src/gleam/float.gleam", 160).
|
|
282
|
+
?DOC(
|
|
283
|
+
" Checks for equality of two `Float`s within a tolerance,\n"
|
|
284
|
+
" returning a `Bool`.\n"
|
|
285
|
+
"\n"
|
|
286
|
+
" This function allows Float comparison while handling\n"
|
|
287
|
+
" [Floating Point Imprecision](https://en.wikipedia.org/wiki/Floating-point_arithmetic#Accuracy_problems).\n"
|
|
288
|
+
"\n"
|
|
289
|
+
" Notice: For `Float`s the tolerance won't be exact:\n"
|
|
290
|
+
" `5.3 - 5.0` is not exactly `0.3`.\n"
|
|
291
|
+
"\n"
|
|
292
|
+
" ## Examples\n"
|
|
293
|
+
"\n"
|
|
294
|
+
" ```gleam\n"
|
|
295
|
+
" assert loosely_equals(5.0, with: 5.3, tolerating: 0.5)\n"
|
|
296
|
+
" ```\n"
|
|
297
|
+
"\n"
|
|
298
|
+
" ```gleam\n"
|
|
299
|
+
" assert !loosely_equals(5.0, with: 5.1, tolerating: 0.1)\n"
|
|
300
|
+
" ```\n"
|
|
301
|
+
).
|
|
302
|
+
-spec loosely_equals(float(), float(), float()) -> boolean().
|
|
303
|
+
loosely_equals(A, B, Tolerance) ->
|
|
304
|
+
Difference = absolute_value(A - B),
|
|
305
|
+
Difference =< Tolerance.
|
|
306
|
+
|
|
307
|
+
-file("src/gleam/float.gleam", 334).
|
|
308
|
+
?DOC(
|
|
309
|
+
" Returns the result of the base being raised to the power of the\n"
|
|
310
|
+
" exponent, as a `Float`.\n"
|
|
311
|
+
"\n"
|
|
312
|
+
" ## Examples\n"
|
|
313
|
+
"\n"
|
|
314
|
+
" ```gleam\n"
|
|
315
|
+
" assert power(2.0, -1.0) == Ok(0.5)\n"
|
|
316
|
+
" ```\n"
|
|
317
|
+
"\n"
|
|
318
|
+
" ```gleam\n"
|
|
319
|
+
" assert power(2.0, 2.0) == Ok(4.0)\n"
|
|
320
|
+
" ```\n"
|
|
321
|
+
"\n"
|
|
322
|
+
" ```gleam\n"
|
|
323
|
+
" assert power(8.0, 1.5) == Ok(22.627416997969522)\n"
|
|
324
|
+
" ```\n"
|
|
325
|
+
"\n"
|
|
326
|
+
" ```gleam\n"
|
|
327
|
+
" assert 4.0 |> power(of: 2.0) == Ok(16.0)\n"
|
|
328
|
+
" ```\n"
|
|
329
|
+
"\n"
|
|
330
|
+
" ```gleam\n"
|
|
331
|
+
" assert power(-1.0, 0.5) == Error(Nil)\n"
|
|
332
|
+
" ```\n"
|
|
333
|
+
).
|
|
334
|
+
-spec power(float(), float()) -> {ok, float()} | {error, nil}.
|
|
335
|
+
power(Base, Exponent) ->
|
|
336
|
+
Fractional = (math:ceil(Exponent) - Exponent) > +0.0,
|
|
337
|
+
case ((Base < +0.0) andalso Fractional) orelse ((Base =:= +0.0) andalso (Exponent
|
|
338
|
+
< +0.0)) of
|
|
339
|
+
true ->
|
|
340
|
+
{error, nil};
|
|
341
|
+
|
|
342
|
+
false ->
|
|
343
|
+
{ok, math:pow(Base, Exponent)}
|
|
344
|
+
end.
|
|
345
|
+
|
|
346
|
+
-file("src/gleam/float.gleam", 364).
|
|
347
|
+
?DOC(
|
|
348
|
+
" Returns the square root of the input as a `Float`.\n"
|
|
349
|
+
"\n"
|
|
350
|
+
" ## Examples\n"
|
|
351
|
+
"\n"
|
|
352
|
+
" ```gleam\n"
|
|
353
|
+
" assert square_root(4.0) == Ok(2.0)\n"
|
|
354
|
+
" ```\n"
|
|
355
|
+
"\n"
|
|
356
|
+
" ```gleam\n"
|
|
357
|
+
" assert square_root(-16.0) == Error(Nil)\n"
|
|
358
|
+
" ```\n"
|
|
359
|
+
).
|
|
360
|
+
-spec square_root(float()) -> {ok, float()} | {error, nil}.
|
|
361
|
+
square_root(X) ->
|
|
362
|
+
power(X, 0.5).
|
|
363
|
+
|
|
364
|
+
-file("src/gleam/float.gleam", 376).
|
|
365
|
+
?DOC(
|
|
366
|
+
" Returns the negative of the value provided.\n"
|
|
367
|
+
"\n"
|
|
368
|
+
" ## Examples\n"
|
|
369
|
+
"\n"
|
|
370
|
+
" ```gleam\n"
|
|
371
|
+
" assert negate(1.0) == -1.0\n"
|
|
372
|
+
" ```\n"
|
|
373
|
+
).
|
|
374
|
+
-spec negate(float()) -> float().
|
|
375
|
+
negate(X) ->
|
|
376
|
+
-1.0 * X.
|
|
377
|
+
|
|
378
|
+
-file("src/gleam/float.gleam", 236).
|
|
379
|
+
?DOC(
|
|
380
|
+
" Rounds the value to the nearest whole number as an `Int`.\n"
|
|
381
|
+
"\n"
|
|
382
|
+
" ## Examples\n"
|
|
383
|
+
"\n"
|
|
384
|
+
" ```gleam\n"
|
|
385
|
+
" assert round(2.3) == 2\n"
|
|
386
|
+
" ```\n"
|
|
387
|
+
"\n"
|
|
388
|
+
" ```gleam\n"
|
|
389
|
+
" assert round(2.5) == 3\n"
|
|
390
|
+
" ```\n"
|
|
391
|
+
).
|
|
392
|
+
-spec round(float()) -> integer().
|
|
393
|
+
round(X) ->
|
|
394
|
+
erlang:round(X).
|
|
395
|
+
|
|
396
|
+
-file("src/gleam/float.gleam", 273).
|
|
397
|
+
?DOC(
|
|
398
|
+
" Converts the value to a given precision as a `Float`.\n"
|
|
399
|
+
" The precision is the number of allowed decimal places.\n"
|
|
400
|
+
" Negative precisions are allowed and force rounding\n"
|
|
401
|
+
" to the nearest tenth, hundredth, thousandth etc.\n"
|
|
402
|
+
"\n"
|
|
403
|
+
" ## Examples\n"
|
|
404
|
+
"\n"
|
|
405
|
+
" ```gleam\n"
|
|
406
|
+
" assert to_precision(2.43434348473, 2) == 2.43\n"
|
|
407
|
+
" ```\n"
|
|
408
|
+
"\n"
|
|
409
|
+
" ```gleam\n"
|
|
410
|
+
" assert to_precision(547890.453444, -3) == 548000.0\n"
|
|
411
|
+
" ```\n"
|
|
412
|
+
).
|
|
413
|
+
-spec to_precision(float(), integer()) -> float().
|
|
414
|
+
to_precision(X, Precision) ->
|
|
415
|
+
case Precision =< 0 of
|
|
416
|
+
true ->
|
|
417
|
+
Factor = math:pow(10.0, erlang:float(- Precision)),
|
|
418
|
+
erlang:float(erlang:round(case Factor of
|
|
419
|
+
+0.0 -> +0.0;
|
|
420
|
+
-0.0 -> -0.0;
|
|
421
|
+
Gleam@denominator -> X / Gleam@denominator
|
|
422
|
+
end)) * Factor;
|
|
423
|
+
|
|
424
|
+
false ->
|
|
425
|
+
Factor@1 = math:pow(10.0, erlang:float(Precision)),
|
|
426
|
+
case Factor@1 of
|
|
427
|
+
+0.0 -> +0.0;
|
|
428
|
+
-0.0 -> -0.0;
|
|
429
|
+
Gleam@denominator@1 -> erlang:float(erlang:round(X * Factor@1))
|
|
430
|
+
/ Gleam@denominator@1
|
|
431
|
+
end
|
|
432
|
+
end.
|
|
433
|
+
|
|
434
|
+
-file("src/gleam/float.gleam", 392).
|
|
435
|
+
-spec sum_loop(list(float()), float()) -> float().
|
|
436
|
+
sum_loop(Numbers, Initial) ->
|
|
437
|
+
case Numbers of
|
|
438
|
+
[First | Rest] ->
|
|
439
|
+
sum_loop(Rest, First + Initial);
|
|
440
|
+
|
|
441
|
+
[] ->
|
|
442
|
+
Initial
|
|
443
|
+
end.
|
|
444
|
+
|
|
445
|
+
-file("src/gleam/float.gleam", 388).
|
|
446
|
+
?DOC(
|
|
447
|
+
" Sums a list of `Float`s.\n"
|
|
448
|
+
"\n"
|
|
449
|
+
" ## Example\n"
|
|
450
|
+
"\n"
|
|
451
|
+
" ```gleam\n"
|
|
452
|
+
" assert sum([1.0, 2.2, 3.3]) == 6.5\n"
|
|
453
|
+
" ```\n"
|
|
454
|
+
).
|
|
455
|
+
-spec sum(list(float())) -> float().
|
|
456
|
+
sum(Numbers) ->
|
|
457
|
+
sum_loop(Numbers, +0.0).
|
|
458
|
+
|
|
459
|
+
-file("src/gleam/float.gleam", 411).
|
|
460
|
+
-spec product_loop(list(float()), float()) -> float().
|
|
461
|
+
product_loop(Numbers, Initial) ->
|
|
462
|
+
case Numbers of
|
|
463
|
+
[First | Rest] ->
|
|
464
|
+
product_loop(Rest, First * Initial);
|
|
465
|
+
|
|
466
|
+
[] ->
|
|
467
|
+
Initial
|
|
468
|
+
end.
|
|
469
|
+
|
|
470
|
+
-file("src/gleam/float.gleam", 407).
|
|
471
|
+
?DOC(
|
|
472
|
+
" Multiplies a list of `Float`s and returns the product.\n"
|
|
473
|
+
"\n"
|
|
474
|
+
" ## Example\n"
|
|
475
|
+
"\n"
|
|
476
|
+
" ```gleam\n"
|
|
477
|
+
" assert product([2.5, 3.2, 4.2]) == 33.6\n"
|
|
478
|
+
" ```\n"
|
|
479
|
+
).
|
|
480
|
+
-spec product(list(float())) -> float().
|
|
481
|
+
product(Numbers) ->
|
|
482
|
+
product_loop(Numbers, 1.0).
|
|
483
|
+
|
|
484
|
+
-file("src/gleam/float.gleam", 433).
|
|
485
|
+
?DOC(
|
|
486
|
+
" Generates a random float between the given zero (inclusive) and one\n"
|
|
487
|
+
" (exclusive).\n"
|
|
488
|
+
"\n"
|
|
489
|
+
" On Erlang this updates the random state in the process dictionary.\n"
|
|
490
|
+
" See: <https://www.erlang.org/doc/man/rand.html#uniform-0>\n"
|
|
491
|
+
"\n"
|
|
492
|
+
" ## Examples\n"
|
|
493
|
+
"\n"
|
|
494
|
+
" ```gleam\n"
|
|
495
|
+
" random()\n"
|
|
496
|
+
" // -> 0.646355926896028\n"
|
|
497
|
+
" ```\n"
|
|
498
|
+
).
|
|
499
|
+
-spec random() -> float().
|
|
500
|
+
random() ->
|
|
501
|
+
rand:uniform().
|
|
502
|
+
|
|
503
|
+
-file("src/gleam/float.gleam", 460).
|
|
504
|
+
?DOC(
|
|
505
|
+
" Computes the modulo of a float division of inputs as a `Result`.\n"
|
|
506
|
+
"\n"
|
|
507
|
+
" Returns division of the inputs as a `Result`: If the given divisor equals\n"
|
|
508
|
+
" `0`, this function returns an `Error`.\n"
|
|
509
|
+
"\n"
|
|
510
|
+
" The computed value will always have the same sign as the `divisor`.\n"
|
|
511
|
+
"\n"
|
|
512
|
+
" ## Examples\n"
|
|
513
|
+
"\n"
|
|
514
|
+
" ```gleam\n"
|
|
515
|
+
" assert modulo(13.3, by: 3.3) == Ok(0.1)\n"
|
|
516
|
+
" ```\n"
|
|
517
|
+
"\n"
|
|
518
|
+
" ```gleam\n"
|
|
519
|
+
" assert modulo(-13.3, by: 3.3) == Ok(3.2)\n"
|
|
520
|
+
" ```\n"
|
|
521
|
+
"\n"
|
|
522
|
+
" ```gleam\n"
|
|
523
|
+
" assert modulo(13.3, by: -3.3) == Ok(-3.2)\n"
|
|
524
|
+
" ```\n"
|
|
525
|
+
"\n"
|
|
526
|
+
" ```gleam\n"
|
|
527
|
+
" assert modulo(-13.3, by: -3.3) == Ok(-0.1)\n"
|
|
528
|
+
" ```\n"
|
|
529
|
+
).
|
|
530
|
+
-spec modulo(float(), float()) -> {ok, float()} | {error, nil}.
|
|
531
|
+
modulo(Dividend, Divisor) ->
|
|
532
|
+
case Divisor of
|
|
533
|
+
+0.0 ->
|
|
534
|
+
{error, nil};
|
|
535
|
+
|
|
536
|
+
_ ->
|
|
537
|
+
{ok, Dividend - (math:floor(case Divisor of
|
|
538
|
+
+0.0 -> +0.0;
|
|
539
|
+
-0.0 -> -0.0;
|
|
540
|
+
Gleam@denominator -> Dividend / Gleam@denominator
|
|
541
|
+
end) * Divisor)}
|
|
542
|
+
end.
|
|
543
|
+
|
|
544
|
+
-file("src/gleam/float.gleam", 479).
|
|
545
|
+
?DOC(
|
|
546
|
+
" Returns division of the inputs as a `Result`.\n"
|
|
547
|
+
"\n"
|
|
548
|
+
" ## Examples\n"
|
|
549
|
+
"\n"
|
|
550
|
+
" ```gleam\n"
|
|
551
|
+
" assert divide(0.0, 1.0) == Ok(0.0)\n"
|
|
552
|
+
" ```\n"
|
|
553
|
+
"\n"
|
|
554
|
+
" ```gleam\n"
|
|
555
|
+
" assert divide(1.0, 0.0) == Error(Nil)\n"
|
|
556
|
+
" ```\n"
|
|
557
|
+
).
|
|
558
|
+
-spec divide(float(), float()) -> {ok, float()} | {error, nil}.
|
|
559
|
+
divide(A, B) ->
|
|
560
|
+
case B of
|
|
561
|
+
+0.0 ->
|
|
562
|
+
{error, nil};
|
|
563
|
+
|
|
564
|
+
B@1 ->
|
|
565
|
+
{ok, case B@1 of
|
|
566
|
+
+0.0 -> +0.0;
|
|
567
|
+
-0.0 -> -0.0;
|
|
568
|
+
Gleam@denominator -> A / Gleam@denominator
|
|
569
|
+
end}
|
|
570
|
+
end.
|
|
571
|
+
|
|
572
|
+
-file("src/gleam/float.gleam", 507).
|
|
573
|
+
?DOC(
|
|
574
|
+
" Adds two floats together.\n"
|
|
575
|
+
"\n"
|
|
576
|
+
" It's the function equivalent of the `+.` operator.\n"
|
|
577
|
+
" This function is useful in higher order functions or pipes.\n"
|
|
578
|
+
"\n"
|
|
579
|
+
" ## Examples\n"
|
|
580
|
+
"\n"
|
|
581
|
+
" ```gleam\n"
|
|
582
|
+
" assert add(1.0, 2.0) == 3.0\n"
|
|
583
|
+
" ```\n"
|
|
584
|
+
"\n"
|
|
585
|
+
" ```gleam\n"
|
|
586
|
+
" import gleam/list\n"
|
|
587
|
+
"\n"
|
|
588
|
+
" assert list.fold([1.0, 2.0, 3.0], 0.0, add) == 6.0\n"
|
|
589
|
+
" ```\n"
|
|
590
|
+
"\n"
|
|
591
|
+
" ```gleam\n"
|
|
592
|
+
" assert 3.0 |> add(2.0) == 5.0\n"
|
|
593
|
+
" ```\n"
|
|
594
|
+
).
|
|
595
|
+
-spec add(float(), float()) -> float().
|
|
596
|
+
add(A, B) ->
|
|
597
|
+
A + B.
|
|
598
|
+
|
|
599
|
+
-file("src/gleam/float.gleam", 532).
|
|
600
|
+
?DOC(
|
|
601
|
+
" Multiplies two floats together.\n"
|
|
602
|
+
"\n"
|
|
603
|
+
" It's the function equivalent of the `*.` operator.\n"
|
|
604
|
+
" This function is useful in higher order functions or pipes.\n"
|
|
605
|
+
"\n"
|
|
606
|
+
" ## Examples\n"
|
|
607
|
+
"\n"
|
|
608
|
+
" ```gleam\n"
|
|
609
|
+
" assert multiply(2.0, 4.0) == 8.0\n"
|
|
610
|
+
" ```\n"
|
|
611
|
+
"\n"
|
|
612
|
+
" ```gleam\n"
|
|
613
|
+
" import gleam/list\n"
|
|
614
|
+
"\n"
|
|
615
|
+
" assert list.fold([2.0, 3.0, 4.0], 1.0, multiply) == 24.0\n"
|
|
616
|
+
" ```\n"
|
|
617
|
+
"\n"
|
|
618
|
+
" ```gleam\n"
|
|
619
|
+
" assert 3.0 |> multiply(2.0) == 6.0\n"
|
|
620
|
+
" ```\n"
|
|
621
|
+
).
|
|
622
|
+
-spec multiply(float(), float()) -> float().
|
|
623
|
+
multiply(A, B) ->
|
|
624
|
+
A * B.
|
|
625
|
+
|
|
626
|
+
-file("src/gleam/float.gleam", 561).
|
|
627
|
+
?DOC(
|
|
628
|
+
" Subtracts one float from another.\n"
|
|
629
|
+
"\n"
|
|
630
|
+
" It's the function equivalent of the `-.` operator.\n"
|
|
631
|
+
" This function is useful in higher order functions or pipes.\n"
|
|
632
|
+
"\n"
|
|
633
|
+
" ## Examples\n"
|
|
634
|
+
"\n"
|
|
635
|
+
" ```gleam\n"
|
|
636
|
+
" assert subtract(3.0, 1.0) == 2.0\n"
|
|
637
|
+
" ```\n"
|
|
638
|
+
"\n"
|
|
639
|
+
" ```gleam\n"
|
|
640
|
+
" import gleam/list\n"
|
|
641
|
+
"\n"
|
|
642
|
+
" assert list.fold([1.0, 2.0, 3.0], 10.0, subtract) == 4.0\n"
|
|
643
|
+
" ```\n"
|
|
644
|
+
"\n"
|
|
645
|
+
" ```gleam\n"
|
|
646
|
+
" assert 3.0 |> subtract(_, 2.0) == 1.0\n"
|
|
647
|
+
" ```\n"
|
|
648
|
+
"\n"
|
|
649
|
+
" ```gleam\n"
|
|
650
|
+
" assert 3.0 |> subtract(2.0, _) == -1.0\n"
|
|
651
|
+
" ```\n"
|
|
652
|
+
).
|
|
653
|
+
-spec subtract(float(), float()) -> float().
|
|
654
|
+
subtract(A, B) ->
|
|
655
|
+
A - B.
|
|
656
|
+
|
|
657
|
+
-file("src/gleam/float.gleam", 586).
|
|
658
|
+
?DOC(
|
|
659
|
+
" Returns the natural logarithm (base e) of the given `Float` as a `Result`. If the\n"
|
|
660
|
+
" input is less than or equal to 0, returns `Error(Nil)`.\n"
|
|
661
|
+
"\n"
|
|
662
|
+
" ## Examples\n"
|
|
663
|
+
"\n"
|
|
664
|
+
" ```gleam\n"
|
|
665
|
+
" assert logarithm(1.0) == Ok(0.0)\n"
|
|
666
|
+
" ```\n"
|
|
667
|
+
"\n"
|
|
668
|
+
" ```gleam\n"
|
|
669
|
+
" assert logarithm(2.718281828459045) == Ok(1.0)\n"
|
|
670
|
+
" ```\n"
|
|
671
|
+
"\n"
|
|
672
|
+
" ```gleam\n"
|
|
673
|
+
" assert logarithm(0.0) == Error(Nil)\n"
|
|
674
|
+
" ```\n"
|
|
675
|
+
"\n"
|
|
676
|
+
" ```gleam\n"
|
|
677
|
+
" assert logarithm(-1.0) == Error(Nil)\n"
|
|
678
|
+
" ```\n"
|
|
679
|
+
).
|
|
680
|
+
-spec logarithm(float()) -> {ok, float()} | {error, nil}.
|
|
681
|
+
logarithm(X) ->
|
|
682
|
+
case X =< +0.0 of
|
|
683
|
+
true ->
|
|
684
|
+
{error, nil};
|
|
685
|
+
|
|
686
|
+
false ->
|
|
687
|
+
{ok, math:log(X)}
|
|
688
|
+
end.
|
|
689
|
+
|
|
690
|
+
-file("src/gleam/float.gleam", 621).
|
|
691
|
+
?DOC(
|
|
692
|
+
" Returns e (Euler's number) raised to the power of the given exponent, as\n"
|
|
693
|
+
" a `Float`.\n"
|
|
694
|
+
"\n"
|
|
695
|
+
" ## Examples\n"
|
|
696
|
+
"\n"
|
|
697
|
+
" ```gleam\n"
|
|
698
|
+
" assert exponential(0.0) == Ok(1.0)\n"
|
|
699
|
+
" ```\n"
|
|
700
|
+
"\n"
|
|
701
|
+
" ```gleam\n"
|
|
702
|
+
" assert exponential(1.0) == Ok(2.718281828459045)\n"
|
|
703
|
+
" ```\n"
|
|
704
|
+
"\n"
|
|
705
|
+
" ```gleam\n"
|
|
706
|
+
" assert exponential(-1.0) == Ok(0.36787944117144233)\n"
|
|
707
|
+
" ```\n"
|
|
708
|
+
).
|
|
709
|
+
-spec exponential(float()) -> float().
|
|
710
|
+
exponential(X) ->
|
|
711
|
+
math:exp(X).
|