| 1 | // Copyright (c) 2019-2024 Alexander Medvednikov. All rights reserved. |
| 2 | // Use of this source code is governed by an MIT license |
| 3 | // that can be found in the LICENSE file. |
| 4 | module math |
| 5 | |
| 6 | pub const epsilon = 2.2204460492503130808472633361816E-16 |
| 7 | pub const e = 2.71828182845904523536028747135266249775724709369995957496696763 |
| 8 | pub const pi = 3.14159265358979323846264338327950288419716939937510582097494459 |
| 9 | pub const pi_2 = pi / 2.0 |
| 10 | pub const pi_4 = pi / 4.0 |
| 11 | pub const phi = 1.61803398874989484820458683436563811772030917980576286213544862 |
| 12 | pub const tau = 6.28318530717958647692528676655900576839433879875021164194988918 |
| 13 | pub const one_over_tau = 1.0 / tau |
| 14 | pub const one_over_pi = 1.0 / pi |
| 15 | pub const tau_over2 = tau / 2.0 |
| 16 | pub const tau_over4 = tau / 4.0 |
| 17 | pub const tau_over8 = tau / 8.0 |
| 18 | pub const sqrt2 = 1.41421356237309504880168872420969807856967187537694807317667974 |
| 19 | pub const sqrt_3 = 1.73205080756887729352744634150587236694280525381038062805580697 |
| 20 | pub const sqrt_5 = 2.23606797749978969640917366873127623544061835961152572427089724 |
| 21 | pub const sqrt_e = 1.64872127070012814684865078781416357165377610071014801157507931 |
| 22 | pub const sqrt_pi = 1.77245385090551602729816748334114518279754945612238712821380779 |
| 23 | pub const sqrt_tau = 2.50662827463100050241576528481104525300698674060993831662992357 |
| 24 | pub const sqrt_phi = 1.27201964951406896425242246173749149171560804184009624861664038 |
| 25 | pub const ln2 = 0.693147180559945309417232121458176568075500134360255254120680009 |
| 26 | pub const log2_e = 1.0 / ln2 |
| 27 | pub const ln10 = 2.30258509299404568401799145468436420760110148862877297603332790 |
| 28 | pub const log10_e = 1.0 / ln10 |
| 29 | pub const two_thirds = 0.66666666666666666666666666666666666666666666666666666666666667 |
| 30 | |
| 31 | // Floating-point limit values |
| 32 | // max is the largest finite value representable by the type. |
| 33 | // smallest_non_zero is the smallest positive, non-zero value representable by the type. |
| 34 | pub const max_f32 = 3.40282346638528859811704183484516925440e+38 // 2**127 * (2**24 - 1) / 2**23 |
| 35 | |
| 36 | pub const smallest_non_zero_f32 = 1.401298464324817070923729583289916131280e-45 // 1 / 2**(127 - 1 + 23) |
| 37 | |
| 38 | pub const max_f64 = 1.797693134862315708145274237317043567981e+308 // 2**1023 * (2**53 - 1) / 2**52 |
| 39 | |
| 40 | pub const smallest_non_zero_f64 = 4.940656458412465441765687928682213723651e-324 |
| 41 | |
| 42 | // -9223372036854775808 is wrong, because C compilers parse literal values |
| 43 | // without sign first, and 9223372036854775808 overflows i64, hence the |
| 44 | // consecutive subtraction by 1 |
| 45 | |