math: make consts and structs public

pull/2578/head
Alexander Medvednikov 2019-10-28 16:33:32 +03:00
parent ddcd1d2cec
commit 9e9935acbc
2 changed files with 37 additions and 37 deletions

View File

@ -4,9 +4,9 @@
module complex
import math
import math
struct Complex {
pub struct Complex {
pub:
re f64
im f64
@ -17,7 +17,7 @@ pub fn complex(re f64, im f64) Complex {
}
// To String method
pub fn (c Complex) str() string {
pub fn (c Complex) str() string {
mut out := '$c.re'
out += if c.im >= 0 {
'+$c.im'
@ -40,7 +40,7 @@ pub fn (c Complex) mod() f64 {
// Complex Angle
pub fn (c Complex) angle() f64 {
pub fn (c Complex) angle() f64 {
return math.atan2(c.im, c.re)
}
@ -58,7 +58,7 @@ pub fn (c1 Complex) - (c2 Complex) Complex {
// Currently Not Supported
// pub fn (c1 Complex) * (c2 Complex) Complex {
// return Complex{
// (c1.re * c2.re) + ((c1.im * c2.im) * -1),
// (c1.re * c2.re) + ((c1.im * c2.im) * -1),
// (c1.re * c2.im) + (c1.im * c2.re)
// }
// }
@ -67,8 +67,8 @@ pub fn (c1 Complex) - (c2 Complex) Complex {
// Currently Not Supported
// pub fn (c1 Complex) / (c2 Complex) Complex {
// denom := (c2.re * c2.re) + (c2.im * c2.im)
// return Complex {
// ((c1.re * c2.re) + ((c1.im * -c2.im) * -1))/denom,
// return Complex {
// ((c1.re * c2.re) + ((c1.im * -c2.im) * -1))/denom,
// ((c1.re * -c2.im) + (c1.im * c2.re))/denom
// }
// }
@ -86,7 +86,7 @@ pub fn (c1 Complex) subtract(c2 Complex) Complex {
// Complex Multiplication c1.multiply(c2)
pub fn (c1 Complex) multiply(c2 Complex) Complex {
return Complex{
(c1.re * c2.re) + ((c1.im * c2.im) * -1),
(c1.re * c2.re) + ((c1.im * c2.im) * -1),
(c1.re * c2.im) + (c1.im * c2.re)
}
}
@ -94,8 +94,8 @@ pub fn (c1 Complex) multiply(c2 Complex) Complex {
// Complex Division c1.divide(c2)
pub fn (c1 Complex) divide(c2 Complex) Complex {
denom := (c2.re * c2.re) + (c2.im * c2.im)
return Complex {
((c1.re * c2.re) + ((c1.im * -c2.im) * -1)) / denom,
return Complex {
((c1.re * c2.re) + ((c1.im * -c2.im) * -1)) / denom,
((c1.re * -c2.im) + (c1.im * c2.re)) / denom
}
}
@ -106,7 +106,7 @@ pub fn (c Complex) conjugate() Complex{
}
// Complex Additive Inverse
// Based on
// Based on
// http://tutorial.math.lamar.edu/Extras/ComplexPrimer/Arithmetic.aspx
pub fn (c Complex) addinv() Complex {
return Complex{-c.re, -c.im}
@ -121,7 +121,7 @@ pub fn (c Complex) mulinv() Complex {
-c.im / (c.re * c.re + c.im * c.im)
}
}
// Complex Power
// Based on
// https://www.khanacademy.org/math/precalculus/imaginary-and-complex-numbers/multiplying-and-dividing-complex-numbers-in-polar-form/a/complex-number-polar-form-review
@ -134,25 +134,25 @@ pub fn (c Complex) pow(n f64) Complex {
}
}
// Complex nth root
// Complex nth root
pub fn (c Complex) root(n f64) Complex {
return c.pow(1.0 / n)
}
// Complex Exponential
// Using Euler's Identity
// Using Euler's Identity
// Based on
// https://www.math.wisc.edu/~angenent/Free-Lecture-Notes/freecomplexnumbers.pdf
pub fn (c Complex) exp() Complex {
a := math.exp(c.re)
return Complex {
a * math.cos(c.im),
a * math.cos(c.im),
a * math.sin(c.im)
}
}
// Complex Natural Logarithm
// Based on
// Based on
// http://www.chemistrylearning.com/logarithm-of-complex-number/
pub fn (c Complex) ln() Complex {
return Complex {
@ -162,7 +162,7 @@ pub fn (c Complex) ln() Complex {
}
// Complex Log Base Complex
// Based on
// Based on
// http://www.milefoot.com/math/complex/summaryops.htm
pub fn (c Complex) log(base Complex) Complex {
return base.ln().divide(c.ln())
@ -184,7 +184,7 @@ pub fn (c Complex) cpow(p Complex) Complex {
d := p.re * a + (1.0/2) * p.im * math.log(b)
t1 := math.pow(b,p.re/2) * math.exp(-p.im*a)
return Complex{
t1 * math.cos(d),
t1 * math.cos(d),
t1 * math.sin(d)
}
}
@ -238,7 +238,7 @@ pub fn (c Complex) csc() Complex {
}
// Complex Arc Sin / Sin Inverse
// Based on
// Based on
// http://www.milefoot.com/math/complex/summaryops.htm
pub fn (c Complex) asin() Complex {
return complex(0,-1).multiply(
@ -254,7 +254,7 @@ pub fn (c Complex) asin() Complex {
}
// Complex Arc Consine / Consine Inverse
// Based on
// Based on
// http://www.milefoot.com/math/complex/summaryops.htm
pub fn (c Complex) acos() Complex {
return complex(0,-1).multiply(
@ -271,7 +271,7 @@ pub fn (c Complex) acos() Complex {
}
// Complex Arc Tangent / Tangent Inverse
// Based on
// Based on
// http://www.milefoot.com/math/complex/summaryops.htm
pub fn (c Complex) atan() Complex {
i := complex(0,1)
@ -285,21 +285,21 @@ pub fn (c Complex) atan() Complex {
}
// Complex Arc Cotangent / Cotangent Inverse
// Based on
// Based on
// http://www.suitcaseofdreams.net/Inverse_Functions.htm
pub fn (c Complex) acot() Complex {
return complex(1,0).divide(c).atan()
}
// Complex Arc Secant / Secant Inverse
// Based on
// Based on
// http://www.suitcaseofdreams.net/Inverse_Functions.htm
pub fn (c Complex) asec() Complex {
return complex(1,0).divide(c).acos()
}
// Complex Arc Cosecant / Cosecant Inverse
// Based on
// Based on
// http://www.suitcaseofdreams.net/Inverse_Functions.htm
pub fn (c Complex) acsc() Complex {
return complex(1,0).divide(c).asin()
@ -354,7 +354,7 @@ pub fn (c Complex) csch() Complex {
}
// Complex Hyperbolic Arc Sin / Sin Inverse
// Based on
// Based on
// http://www.suitcaseofdreams.net/Inverse__Hyperbolic_Functions.htm
pub fn (c Complex) asinh() Complex {
return c.add(
@ -365,7 +365,7 @@ pub fn (c Complex) asinh() Complex {
}
// Complex Hyperbolic Arc Consine / Consine Inverse
// Based on
// Based on
// http://www.suitcaseofdreams.net/Inverse__Hyperbolic_Functions.htm
pub fn (c Complex) acosh() Complex {
if(c.re > 1) {
@ -389,7 +389,7 @@ pub fn (c Complex) acosh() Complex {
}
// Complex Hyperbolic Arc Tangent / Tangent Inverse
// Based on
// Based on
// http://www.suitcaseofdreams.net/Inverse__Hyperbolic_Functions.htm
pub fn (c Complex) atanh() Complex {
one := complex(1,0)
@ -419,7 +419,7 @@ pub fn (c Complex) atanh() Complex {
}
// Complex Hyperbolic Arc Cotangent / Cotangent Inverse
// Based on
// Based on
// http://www.suitcaseofdreams.net/Inverse__Hyperbolic_Functions.htm
pub fn (c Complex) acoth() Complex {
one := complex(1,0)
@ -449,7 +449,7 @@ pub fn (c Complex) acoth() Complex {
}
// Complex Hyperbolic Arc Secant / Secant Inverse
// Based on
// Based on
// http://www.suitcaseofdreams.net/Inverse__Hyperbolic_Functions.htm
// For certain scenarios, Result mismatch in crossverification with Wolfram Alpha - analysis pending
// pub fn (c Complex) asech() Complex {
@ -457,7 +457,7 @@ pub fn (c Complex) acoth() Complex {
// if(c.re < -1.0) {
// return one.subtract(
// one.subtract(
// c.pow(2)
// c.pow(2)
// )
// .root(2)
// )
@ -467,7 +467,7 @@ pub fn (c Complex) acoth() Complex {
// else {
// return one.add(
// one.subtract(
// c.pow(2)
// c.pow(2)
// )
// .root(2)
// )
@ -477,14 +477,14 @@ pub fn (c Complex) acoth() Complex {
// }
// Complex Hyperbolic Arc Cosecant / Cosecant Inverse
// Based on
// Based on
// http://www.suitcaseofdreams.net/Inverse__Hyperbolic_Functions.htm
pub fn (c Complex) acsch() Complex {
one := complex(1,0)
if(c.re < 0) {
return one.subtract(
one.add(
c.pow(2)
c.pow(2)
)
.root(2)
)
@ -493,7 +493,7 @@ pub fn (c Complex) acsch() Complex {
} else {
return one.add(
one.add(
c.pow(2)
c.pow(2)
)
.root(2)
)

View File

@ -4,7 +4,7 @@
module math
const (
pub const (
e = 2.71828182845904523536028747135266249775724709369995957496696763
pi = 3.14159265358979323846264338327950288419716939937510582097494459
phi = 1.61803398874989484820458683436563811772030917980576286213544862
@ -25,7 +25,7 @@ const (
// Floating-point limit values
// max is the largest finite value representable by the type.
// smallest_non_zero is the smallest positive, non-zero value representable by the type.
const (
pub const (
max_f32 = 3.40282346638528859811704183484516925440e+38 // 2**127 * (2**24 - 1) / 2**23
smallest_non_zero_f32 = 1.401298464324817070923729583289916131280e-45 // 1 / 2**(127 - 1 + 23)
@ -34,7 +34,7 @@ const (
)
// Integer limit values
const (
pub const (
max_i8 = 127
min_i8 = -128
max_i16 = 32767