Browse Source

Wrap the existing Complex type instead of redefining it

v2
Gustavo Guerra 14 years ago
parent
commit
6729141084
  1. 60
      src/FSharp/complex.fs
  2. 121
      src/FSharp/complex.fsi

60
src/FSharp/complex.fs

@ -10,7 +10,9 @@ namespace MathNet.Numerics
open Microsoft.FSharp.Math
open System
open System.Globalization
open System.Numerics
(*
[<Struct>]
[<CustomEquality; CustomComparison>]
type Complex(real: float, imaginary: float) =
@ -34,10 +36,16 @@ namespace MathNet.Numerics
| _ -> false
override x.GetHashCode() =
(hash x.r >>> 5) ^^^ (hash x.r <<< 3) ^^^ (((hash x.i >>> 4) ^^^ (hash x.i <<< 4)) + 0x9e3779b9)
*)
type complex = Complex
[<AutoOpen>]
module private ComplexExtensionsBasic =
type Complex with
member x.r = x.Real
member x.i = x.Imaginary
[<CompilationRepresentation(CompilationRepresentationFlags.ModuleSuffix)>]
module Complex =
let mkRect(a,b) = new Complex(a,b)
@ -98,34 +106,30 @@ namespace MathNet.Numerics
let tan x = let exp2ix = exp(iscale 2.0 x) in
(div (sub exp2ix one) (add exp2ix one)) |> iscale -1.0
type Complex with
static member Create(a,b) = Complex.mkRect (a,b)
static member CreatePolar(a,b) = Complex.mkPolar (a,b)
member x.Magnitude = Complex.magnitude x
member x.Phase = Complex.phase x
member x.RealPart = x.r
member x.ImaginaryPart = x.i
member x.Conjugate = Complex.conjugate x
static member Sin(x) = Complex.sin(x)
static member Cos(x) = Complex.cos(x)
static member Abs(x) = Complex.abs(x)
static member Tan(x) = Complex.tan(x)
static member Log(x) = Complex.log(x)
static member Exp(x) = Complex.exp(x)
static member Sqrt(x) = Complex.sqrt(x)
[<AutoOpen>]
module ComplexExtensions =
type Complex with
member x.r = x.Real
member x.i = x.Imaginary
static member Create(a,b) = Complex.mkRect (a,b)
static member CreatePolar(a,b) = Complex.mkPolar (a,b)
member x.Magnitude = Complex.magnitude x
member x.Phase = Complex.phase x
member x.RealPart = x.r
member x.ImaginaryPart = x.i
member x.Conjugate = Complex.conjugate x
static member Sin(x) = Complex.sin(x)
static member Cos(x) = Complex.cos(x)
static member Abs(x) = Complex.abs(x)
static member Tan(x) = Complex.tan(x)
static member Log(x) = Complex.log(x)
static member Exp(x) = Complex.exp(x)
static member Sqrt(x) = Complex.sqrt(x)
static member Zero = Complex.zero
static member One = Complex.one
static member OneI = Complex.onei
static member ( + ) (a,b) = Complex.add a b
static member ( - ) (a,b) = Complex.sub a b
static member ( * ) (a,b) = Complex.mul a b
static member ( / ) (a,b) = Complex.div a b
static member ( ~- ) a = Complex.neg a
static member ( * ) (a,b) = Complex.smul a b
static member ( * ) (a,b) = Complex.muls a b
static member Zero = Complex.zero
static member One = Complex.one
static member OneI = Complex.onei
module ComplexTopLevelOperators =

121
src/FSharp/complex.fsi

@ -6,66 +6,71 @@
namespace MathNet.Numerics
open System
/// The type of complex numbers stored as pairs of 64-bit floating point numbers in rectangular coordinates
[<Struct>]
[<CustomEquality; CustomComparison>]
type Complex =
/// The real part of a complex number
member r: float
/// The imaginary part of a complex number
member i: float
/// The polar-coordinate magnitude of a complex number
member Magnitude: float
/// The polar-coordinate phase of a complex number
member Phase: float
/// The real part of a complex number
member RealPart: float
/// The imaginary part of a complex number
member ImaginaryPart: float
/// The conjugate of a complex number, i.e. x-yi
member Conjugate: Complex
/// Create a complex number x+ij using rectangular coordinates
static member Create : float * float -> Complex
/// Create a complex number using magnitude/phase polar coordinates
static member CreatePolar : float * float -> Complex
/// The complex number 0+0i
static member Zero : Complex
/// The complex number 1+0i
static member One : Complex
/// The complex number 0+1i
static member OneI : Complex
/// Add two complex numbers
static member ( + ) : Complex * Complex -> Complex
/// Subtract one complex number from another
static member ( - ) : Complex * Complex -> Complex
/// Multiply two complex numbers
static member ( * ) : Complex * Complex -> Complex
/// Complex division of two complex numbers
static member ( / ) : Complex * Complex -> Complex
/// Unary negation of a complex number
static member ( ~- ) : Complex -> Complex
/// Multiply a scalar by a complex number
static member ( * ) : float * Complex -> Complex
/// Multiply a complex number by a scalar
static member ( * ) : Complex * float -> Complex
static member Sin : Complex -> Complex
static member Cos : Complex -> Complex
open System.Numerics
[<AutoOpen>]
module ComplexExtensions =
/// The type of complex numbers stored as pairs of 64-bit floating point numbers in rectangular coordinates
type Complex with
/// The real part of a complex number
member r: float
/// The imaginary part of a complex number
member i: float
/// The polar-coordinate magnitude of a complex number
member Magnitude: float
/// The polar-coordinate phase of a complex number
member Phase: float
/// The real part of a complex number
member RealPart: float
/// The imaginary part of a complex number
member ImaginaryPart: float
/// The conjugate of a complex number, i.e. x-yi
member Conjugate: Complex
/// Create a complex number x+ij using rectangular coordinates
static member Create : float * float -> Complex
/// Create a complex number using magnitude/phase polar coordinates
static member CreatePolar : float * float -> Complex
/// The complex number 0+0i
static member Zero : Complex
/// The complex number 1+0i
static member One : Complex
/// The complex number 0+1i
static member OneI : Complex
(*
/// Add two complex numbers
static member ( + ) : Complex * Complex -> Complex
/// Subtract one complex number from another
static member ( - ) : Complex * Complex -> Complex
/// Multiply two complex numbers
static member ( * ) : Complex * Complex -> Complex
/// Complex division of two complex numbers
static member ( / ) : Complex * Complex -> Complex
/// Unary negation of a complex number
static member ( ~- ) : Complex -> Complex
/// Multiply a scalar by a complex number
static member ( * ) : float * Complex -> Complex
/// Multiply a complex number by a scalar
static member ( * ) : Complex * float -> Complex
*)
static member Sin : Complex -> Complex
static member Cos : Complex -> Complex
/// Computes the absolute value of a complex number: e.g. Abs x+iy = sqrt(x**2.0 + y**2.0.)
/// Note: Complex.Abs(z) is the same as z.Magnitude
static member Abs : Complex -> float
static member Tan : Complex -> Complex
static member Log : Complex -> Complex
static member Exp : Complex -> Complex
static member Sqrt : Complex -> Complex
/// Computes the absolute value of a complex number: e.g. Abs x+iy = sqrt(x**2.0 + y**2.0.)
/// Note: Complex.Abs(z) is the same as z.Magnitude
static member Abs : Complex -> float
static member Tan : Complex -> Complex
static member Log : Complex -> Complex
static member Exp : Complex -> Complex
static member Sqrt : Complex -> Complex
override ToString : unit -> string
override Equals : obj -> bool
interface System.IComparable
member ToString : format:string -> string
member ToString : format:string * provider:System.IFormatProvider -> string
(*
override ToString : unit -> string
override Equals : obj -> bool
interface System.IComparable
member ToString : format:string -> string
member ToString : format:string * provider:System.IFormatProvider -> string
*)
/// The type of complex numbers
type complex = Complex

Loading…
Cancel
Save