Imports System.Numerics
Public Structure BigDecimal
Private Shared _Rnd As New Random
Private Value As BigInteger
Private MLen As Integer
Private Shared _P As Integer = 64
Public Shared ReadOnly NegativeOne As New BigDecimal(-1)
Public Shared ReadOnly Zero As New BigDecimal(0)
Public Shared ReadOnly ZeroPointFive As New BigDecimal(0.5)
Public Shared ReadOnly One As New BigDecimal(1)
Public Shared ReadOnly Two As New BigDecimal(2)
Public Shared ReadOnly ThreePointTwo As New BigDecimal(3.2)
Public Shared ReadOnly Four As New BigDecimal(4)
Public Shared ReadOnly Five As New BigDecimal(5)
Public Shared ReadOnly TwentyFive As New BigDecimal(25)
Public Shared ReadOnly TwoHundredThirtyNine As New BigDecimal(239)
Public Shared ReadOnly FiftySevenThousandOneHundredTwentyOne As New BigDecimal(57121)
#Region "Properties"
Public Shared Property GlobalAccuracy() As Integer
Get
Return _P
End Get
Set(value As Integer)
_P = value
End Set
End Property
Public ReadOnly Property MantissaLength() As Integer
Get
Return MLen
End Get
End Property
Public ReadOnly Property IsOne() As Boolean
Get
If MLen = 0 Then Return Value.IsOne Else Return False
End Get
End Property
Public ReadOnly Property IsZero() As Boolean
Get
Return Value.IsZero
End Get
End Property
Public ReadOnly Property Sign() As Integer
Get
Return Value.Sign
End Get
End Property
Public ReadOnly Property IsPowerOfTwo() As Boolean
Get
If MLen = 0 AndAlso Value.IsPowerOfTwo Then Return True Else Return False
End Get
End Property
Public ReadOnly Property IsEven As Boolean
Get
If MLen = 0 AndAlso Value.IsEven Then Return True Else Return False
End Get
End Property
#End Region
#Region "Constructors"
Public Sub New(ByVal N As String)
If N.StartsWith("#") Then N = N.Remove(0, 1) Else N = FormatString(N)
Dim Dec As Integer = N.IndexOf(".")
If Dec > -1 Then MLen = N.Length - (Dec + 1) Else MLen = 0
Value = BigInteger.Parse(N.Replace(".", ""))
End Sub
Public Sub New(ByVal N As Decimal, Optional ByVal M As Integer = 0)
Dim Str As String = N
Dim Dec As Integer = Str.IndexOf(".")
If Dec > -1 Then MLen = Str.Length - (Dec + 1) Else MLen = M
Value = BigInteger.Parse(N.ToString.Replace("."c, ""))
End Sub
Public Sub New(ByVal N As Single, Optional ByVal M As Integer = 0)
Dim Str As String = N
Dim Dec As Integer = Str.IndexOf(".")
If Dec > -1 Then MLen = Str.Length - (Dec + 1) Else MLen = M
Value = BigInteger.Parse(N.ToString.Replace("."c, ""))
End Sub
Public Sub New(ByVal N As Double, Optional ByVal M As Integer = 0)
Dim Str As String = N
Dim Dec As Integer = Str.IndexOf(".")
If Dec > -1 Then MLen = Str.Length - (Dec + 1) Else MLen = M
Value = BigInteger.Parse(N.ToString.Replace("."c, ""))
End Sub
Public Sub New(ByVal N() As Byte)
MLen = BitConverter.ToInt32({N(0), N(1), N(2), N(3)}, 0)
Dim VBytes(N.Length - 5) As Byte
Array.Copy(N, 4, VBytes, 0, VBytes.Length)
Value = New BigInteger(VBytes)
End Sub
Public Sub New(ByVal N As BigInteger, Optional ByVal M As Integer = 0)
Value = N
MLen = M
End Sub
Public Sub New(ByVal N As Integer, Optional ByVal M As Integer = 0)
Value = New BigInteger(N)
MLen = M
End Sub
Public Sub New(ByVal N As Long, Optional ByVal M As Integer = 0)
Value = New BigInteger(N)
MLen = M
End Sub
Public Sub New(ByVal N As UInteger, Optional ByVal M As Integer = 0)
Value = New BigInteger(N)
MLen = M
End Sub
Public Sub New(ByVal N As ULong, Optional ByVal M As Integer = 0)
Value = New BigInteger(N)
MLen = M
End Sub
Public Sub New(ByVal N As Short, Optional ByVal M As Integer = 0)
Value = New BigInteger(N)
MLen = M
End Sub
Public Sub New(ByVal N As UShort, Optional ByVal M As Integer = 0)
Value = New BigInteger(N)
MLen = M
End Sub
Public Sub New(ByVal N As Byte, Optional ByVal M As Integer = 0)
Value = New BigInteger(N)
MLen = M
End Sub
Public Sub New(ByVal N As SByte, Optional ByVal M As Integer = 0)
Value = New BigInteger(N)
MLen = M
End Sub
#End Region
#Region "Convert"
Public Shared Widening Operator CType(ByVal N As BigDecimal) As Byte()
Return N.ToByteArray
End Operator
Public Shared Widening Operator CType(ByVal N() As Byte) As BigDecimal
Return New BigDecimal(N)
End Operator
Public Shared Widening Operator CType(ByVal N As BigDecimal) As String
Return N.ToString
End Operator
Public Shared Widening Operator CType(ByVal N As String) As BigDecimal
Select Case N
Case "-1"
Return NegativeOne
Case "0"
Return Zero
Case "0.5"
Return ZeroPointFive
Case "1"
Return One
Case "2"
Return Two
Case "3.2"
Return ThreePointTwo
Case "4"
Return Four
Case "5"
Return Five
Case "25"
Return TwentyFive
Case "239"
Return TwoHundredThirtyNine
Case "57121"
Return FiftySevenThousandOneHundredTwentyOne
Case Else
Return New BigDecimal(N)
End Select
End Operator
Public Shared Widening Operator CType(ByVal N As BigInteger) As BigDecimal
Select Case N
Case -1
Return NegativeOne
Case 0
Return Zero
Case 1
Return One
Case 2
Return Two
Case 4
Return Four
Case 5
Return Five
Case 25
Return TwentyFive
Case 239
Return TwoHundredThirtyNine
Case 57121
Return FiftySevenThousandOneHundredTwentyOne
Case Else
Return New BigDecimal(N)
End Select
End Operator
Public Shared Widening Operator CType(ByVal N As Decimal) As BigDecimal
Select Case N
Case -1
Return NegativeOne
Case 0
Return Zero
Case 0.5
Return ZeroPointFive
Case 1
Return One
Case 2
Return Two
Case 3.2
Return ThreePointTwo
Case 4
Return Four
Case 5
Return Five
Case 25
Return TwentyFive
Case 239
Return TwoHundredThirtyNine
Case 57121
Return FiftySevenThousandOneHundredTwentyOne
Case Else
Return New BigDecimal(N)
End Select
End Operator
Public Shared Widening Operator CType(ByVal N As Double) As BigDecimal
Select Case N
Case -1
Return NegativeOne
Case 0
Return Zero
Case 0.5
Return ZeroPointFive
Case 1
Return One
Case 2
Return Two
Case 3.2
Return ThreePointTwo
Case 4
Return Four
Case 5
Return Five
Case 25
Return TwentyFive
Case 239
Return TwoHundredThirtyNine
Case 57121
Return FiftySevenThousandOneHundredTwentyOne
Case Else
Return New BigDecimal(N)
End Select
End Operator
Public Shared Widening Operator CType(ByVal N As Single) As BigDecimal
Select Case N
Case -1
Return NegativeOne
Case 0
Return Zero
Case 0.5
Return ZeroPointFive
Case 1
Return One
Case 2
Return Two
Case 3.2
Return ThreePointTwo
Case 4
Return Four
Case 5
Return Five
Case 25
Return TwentyFive
Case 239
Return TwoHundredThirtyNine
Case 57121
Return FiftySevenThousandOneHundredTwentyOne
Case Else
Return New BigDecimal(N)
End Select
End Operator
Public Shared Widening Operator CType(ByVal N As Integer) As BigDecimal
Select Case N
Case -1
Return NegativeOne
Case 0
Return Zero
Case 1
Return One
Case 2
Return Two
Case 4
Return Four
Case 5
Return Five
Case 25
Return TwentyFive
Case 239
Return TwoHundredThirtyNine
Case 57121
Return FiftySevenThousandOneHundredTwentyOne
Case Else
Return New BigDecimal(N)
End Select
End Operator
Public Shared Widening Operator CType(ByVal N As Long) As BigDecimal
Select Case N
Case -1
Return NegativeOne
Case 0
Return Zero
Case 1
Return One
Case 2
Return Two
Case 4
Return Four
Case 5
Return Five
Case 25
Return TwentyFive
Case 239
Return TwoHundredThirtyNine
Case 57121
Return FiftySevenThousandOneHundredTwentyOne
Case Else
Return New BigDecimal(N)
End Select
End Operator
Public Shared Widening Operator CType(ByVal N As UInteger) As BigDecimal
Select Case N
Case 0
Return Zero
Case 1
Return One
Case 2
Return Two
Case 4
Return Four
Case 5
Return Five
Case 25
Return TwentyFive
Case 239
Return TwoHundredThirtyNine
Case 57121
Return FiftySevenThousandOneHundredTwentyOne
Case Else
Return New BigDecimal(N)
End Select
End Operator
Public Shared Widening Operator CType(ByVal N As ULong) As BigDecimal
Select Case N
Case 0
Return Zero
Case 1
Return One
Case 2
Return Two
Case 4
Return Four
Case 5
Return Five
Case 25
Return TwentyFive
Case 239
Return TwoHundredThirtyNine
Case 57121
Return FiftySevenThousandOneHundredTwentyOne
Case Else
Return New BigDecimal(N)
End Select
End Operator
Public Shared Widening Operator CType(ByVal N As UShort) As BigDecimal
Select Case N
Case 0
Return Zero
Case 1
Return One
Case 2
Return Two
Case 4
Return Four
Case 5
Return Five
Case 25
Return TwentyFive
Case 239
Return TwoHundredThirtyNine
Case 57121
Return FiftySevenThousandOneHundredTwentyOne
Case Else
Return New BigDecimal(N)
End Select
End Operator
Public Shared Widening Operator CType(ByVal N As Byte) As BigDecimal
Select Case N
Case 0
Return Zero
Case 1
Return One
Case 2
Return Two
Case 4
Return Four
Case 5
Return Five
Case 25
Return TwentyFive
Case 239
Return TwoHundredThirtyNine
Case Else
Return New BigDecimal(N)
End Select
End Operator
Public Shared Widening Operator CType(ByVal N As SByte) As BigDecimal
Select Case N
Case -1
Return NegativeOne
Case 0
Return Zero
Case 1
Return One
Case 2
Return Two
Case 4
Return Four
Case 5
Return Five
Case 25
Return TwentyFive
Case Else
Return New BigDecimal(N)
End Select
End Operator
Public Shared Widening Operator CType(ByVal N As Short) As BigDecimal
Select Case N
Case -1
Return NegativeOne
Case 0
Return Zero
Case 1
Return One
Case 2
Return Two
Case 4
Return Four
Case 5
Return Five
Case 25
Return TwentyFive
Case 239
Return TwoHundredThirtyNine
Case Else
Return New BigDecimal(N)
End Select
End Operator
#End Region
#Region "+"
Public Shared Operator +(ByVal N1 As BigDecimal, ByVal N2 As BigDecimal) As BigDecimal
If N1.MLen = N2.MLen Then
Return New BigDecimal(N1.Value + N2.Value, N1.MLen)
Else
If N1.MLen > N2.MLen _
Then Return New BigDecimal(N1.Value + N2.Value * BigInteger.Pow(10, N1.MLen - N2.MLen), N1.MLen) _
Else Return New BigDecimal(N2.Value + N1.Value * BigInteger.Pow(10, N2.MLen - N1.MLen), N2.MLen)
End If
End Operator
Public Shared Operator +(ByVal N1 As BigDecimal, ByVal N2 As String) As BigDecimal
Return N1 + New BigDecimal(N2)
End Operator
Public Shared Operator +(ByVal N1 As String, ByVal N2 As BigDecimal) As BigDecimal
Return New BigDecimal(N1) + N2
End Operator
Public Shared Operator +(ByVal N1 As BigDecimal, ByVal N2 As BigInteger) As BigDecimal
Return N1 + New BigDecimal(N2)
End Operator
Public Shared Operator +(ByVal N1 As BigInteger, ByVal N2 As BigDecimal) As BigDecimal
Return New BigDecimal(N1) + N2
End Operator
Public Shared Operator +(ByVal N1 As BigDecimal, ByVal N2 As Decimal) As BigDecimal
Return N1 + New BigDecimal(N2)
End Operator
Public Shared Operator +(ByVal N1 As Decimal, ByVal N2 As BigDecimal) As BigDecimal
Return New BigDecimal(N1) + N2
End Operator
Public Shared Operator +(ByVal N1 As BigDecimal, ByVal N2 As Double) As BigDecimal
Return N1 + New BigDecimal(N2)
End Operator
Public Shared Operator +(ByVal N1 As Double, ByVal N2 As BigDecimal) As BigDecimal
Return New BigDecimal(N1) + N2
End Operator
Public Shared Operator +(ByVal N1 As BigDecimal, ByVal N2 As Integer) As BigDecimal
Return N1 + New BigDecimal(N2)
End Operator
Public Shared Operator +(ByVal N1 As Integer, ByVal N2 As BigDecimal) As BigDecimal
Return New BigDecimal(N1) + N2
End Operator
Public Shared Operator +(ByVal N1 As BigDecimal, ByVal N2 As Long) As BigDecimal
Return N1 + New BigDecimal(N2)
End Operator
Public Shared Operator +(ByVal N1 As Long, ByVal N2 As BigDecimal) As BigDecimal
Return New BigDecimal(N1) + N2
End Operator
Public Shared Operator +(ByVal N1 As BigDecimal, ByVal N2 As Single) As BigDecimal
Return N1 + New BigDecimal(N2)
End Operator
Public Shared Operator +(ByVal N1 As Single, ByVal N2 As BigDecimal) As BigDecimal
Return New BigDecimal(N1) + N2
End Operator
Public Shared Operator +(ByVal N1 As BigDecimal, ByVal N2 As UInteger) As BigDecimal
Return N1 + New BigDecimal(N2)
End Operator
Public Shared Operator +(ByVal N1 As UInteger, ByVal N2 As BigDecimal) As BigDecimal
Return New BigDecimal(N1) + N2
End Operator
Public Shared Operator +(ByVal N1 As BigDecimal, ByVal N2 As ULong) As BigDecimal
Return N1 + New BigDecimal(N2)
End Operator
Public Shared Operator +(ByVal N1 As ULong, ByVal N2 As BigDecimal) As BigDecimal
Return New BigDecimal(N1) + N2
End Operator
Public Shared Operator +(ByVal N1 As BigDecimal, ByVal N2 As UShort) As BigDecimal
Return N1 + New BigDecimal(N2)
End Operator
Public Shared Operator +(ByVal N1 As UShort, ByVal N2 As BigDecimal) As BigDecimal
Return New BigDecimal(N1) + N2
End Operator
Public Shared Operator +(ByVal N1 As BigDecimal, ByVal N2 As Byte) As BigDecimal
Return N1 + New BigDecimal(N2)
End Operator
Public Shared Operator +(ByVal N1 As Byte, ByVal N2 As BigDecimal) As BigDecimal
Return New BigDecimal(N1) + N2
End Operator
Public Shared Operator +(ByVal N1 As BigDecimal, ByVal N2 As SByte) As BigDecimal
Return N1 + New BigDecimal(N2)
End Operator
Public Shared Operator +(ByVal N1 As SByte, ByVal N2 As BigDecimal) As BigDecimal
Return New BigDecimal(N1) + N2
End Operator
Public Shared Operator +(ByVal N1 As BigDecimal, ByVal N2 As Short) As BigDecimal
Return N1 + New BigDecimal(N2)
End Operator
Public Shared Operator +(ByVal N1 As Short, ByVal N2 As BigDecimal) As BigDecimal
Return New BigDecimal(N1) + N2
End Operator
#End Region
#Region "-"
Public Shared Operator -(ByVal N1 As BigDecimal, ByVal N2 As BigDecimal) As BigDecimal
If N1.MLen = N2.MLen Then
Return New BigDecimal(N1.Value - N2.Value, N1.MLen)
Else
If N1.MLen > N2.MLen Then
N2.Value *= BigInteger.Pow(10, N1.MLen - N2.MLen)
Return New BigDecimal(N1.Value - N2.Value, N1.MLen)
Else
N1.Value *= BigInteger.Pow(10, N2.MLen - N1.MLen)
Return New BigDecimal(N1.Value - N2.Value, N2.MLen)
End If
End If
End Operator
Public Shared Operator -(ByVal N1 As BigDecimal, ByVal N2 As String) As BigDecimal
Return N1 - New BigDecimal(N2)
End Operator
Public Shared Operator -(ByVal N1 As String, ByVal N2 As BigDecimal) As BigDecimal
Return New BigDecimal(N1) - N2
End Operator
Public Shared Operator -(ByVal N1 As BigDecimal, ByVal N2 As BigInteger) As BigDecimal
Return N1 - New BigDecimal(N2)
End Operator
Public Shared Operator -(ByVal N1 As BigInteger, ByVal N2 As BigDecimal) As BigDecimal
Return New BigDecimal(N1) - N2
End Operator
Public Shared Operator -(ByVal N1 As BigDecimal, ByVal N2 As Decimal) As BigDecimal
Return N1 - New BigDecimal(N2)
End Operator
Public Shared Operator -(ByVal N1 As Decimal, ByVal N2 As BigDecimal) As BigDecimal
Return New BigDecimal(N1) - N2
End Operator
Public Shared Operator -(ByVal N1 As BigDecimal, ByVal N2 As Double) As BigDecimal
Return N1 - New BigDecimal(N2)
End Operator
Public Shared Operator -(ByVal N1 As Double, ByVal N2 As BigDecimal) As BigDecimal
Return New BigDecimal(N1) - N2
End Operator
Public Shared Operator -(ByVal N1 As BigDecimal, ByVal N2 As Integer) As BigDecimal
Return N1 - New BigDecimal(N2)
End Operator
Public Shared Operator -(ByVal N1 As Integer, ByVal N2 As BigDecimal) As BigDecimal
Return New BigDecimal(N1) - N2
End Operator
Public Shared Operator -(ByVal N1 As BigDecimal, ByVal N2 As Long) As BigDecimal
Return N1 - New BigDecimal(N2)
End Operator
Public Shared Operator -(ByVal N1 As Long, ByVal N2 As BigDecimal) As BigDecimal
Return New BigDecimal(N1) - N2
End Operator
Public Shared Operator -(ByVal N1 As BigDecimal, ByVal N2 As Single) As BigDecimal
Return N1 - New BigDecimal(N2)
End Operator
Public Shared Operator -(ByVal N1 As Single, ByVal N2 As BigDecimal) As BigDecimal
Return New BigDecimal(N1) - N2
End Operator
Public Shared Operator -(ByVal N1 As BigDecimal, ByVal N2 As UInteger) As BigDecimal
Return N1 - New BigDecimal(N2)
End Operator
Public Shared Operator -(ByVal N1 As UInteger, ByVal N2 As BigDecimal) As BigDecimal
Return New BigDecimal(N1) - N2
End Operator
Public Shared Operator -(ByVal N1 As BigDecimal, ByVal N2 As ULong) As BigDecimal
Return N1 - New BigDecimal(N2)
End Operator
Public Shared Operator -(ByVal N1 As ULong, ByVal N2 As BigDecimal) As BigDecimal
Return New BigDecimal(N1) - N2
End Operator
Public Shared Operator -(ByVal N1 As BigDecimal, ByVal N2 As UShort) As BigDecimal
Return N1 - New BigDecimal(N2)
End Operator
Public Shared Operator -(ByVal N1 As UShort, ByVal N2 As BigDecimal) As BigDecimal
Return New BigDecimal(N1) - N2
End Operator
Public Shared Operator -(ByVal N1 As BigDecimal, ByVal N2 As Byte) As BigDecimal
Return N1 - New BigDecimal(N2)
End Operator
Public Shared Operator -(ByVal N1 As Byte, ByVal N2 As BigDecimal) As BigDecimal
Return New BigDecimal(N1) - N2
End Operator
Public Shared Operator -(ByVal N1 As BigDecimal, ByVal N2 As SByte) As BigDecimal
Return N1 - New BigDecimal(N2)
End Operator
Public Shared Operator -(ByVal N1 As SByte, ByVal N2 As BigDecimal) As BigDecimal
Return New BigDecimal(N1) - N2
End Operator
Public Shared Operator -(ByVal N1 As BigDecimal, ByVal N2 As Short) As BigDecimal
Return N1 - New BigDecimal(N2)
End Operator
Public Shared Operator -(ByVal N1 As Short, ByVal N2 As BigDecimal) As BigDecimal
Return New BigDecimal(N1) - N2
End Operator
#End Region
#Region "*"
Public Shared Operator *(ByVal N1 As BigDecimal, ByVal N2 As BigDecimal) As BigDecimal
If N1.MLen = N2.MLen Then Return New BigDecimal(N1.Value * N2.Value, N1.MLen * 2)
Return New BigDecimal(N1.Value * N2.Value, N1.MLen + N2.MLen)
End Operator
Public Shared Operator *(ByVal N1 As BigDecimal, ByVal N2 As String) As BigDecimal
Return N1 * New BigDecimal(N2)
End Operator
Public Shared Operator *(ByVal N1 As String, ByVal N2 As BigDecimal) As BigDecimal
Return New BigDecimal(N1) * N2
End Operator
Public Shared Operator *(ByVal N1 As BigDecimal, ByVal N2 As BigInteger) As BigDecimal
Return N1 * New BigDecimal(N2)
End Operator
Public Shared Operator *(ByVal N1 As BigInteger, ByVal N2 As BigDecimal) As BigDecimal
Return New BigDecimal(N1) * N2
End Operator
Public Shared Operator *(ByVal N1 As BigDecimal, ByVal N2 As Decimal) As BigDecimal
Return N1 * New BigDecimal(N2)
End Operator
Public Shared Operator *(ByVal N1 As Decimal, ByVal N2 As BigDecimal) As BigDecimal
Return New BigDecimal(N1) * N2
End Operator
Public Shared Operator *(ByVal N1 As BigDecimal, ByVal N2 As Double) As BigDecimal
Return N1 * New BigDecimal(N2)
End Operator
Public Shared Operator *(ByVal N1 As Double, ByVal N2 As BigDecimal) As BigDecimal
Return New BigDecimal(N1) * N2
End Operator
Public Shared Operator *(ByVal N1 As BigDecimal, ByVal N2 As Integer) As BigDecimal
Return N1 * New BigDecimal(N2)
End Operator
Public Shared Operator *(ByVal N1 As Integer, ByVal N2 As BigDecimal) As BigDecimal
Return New BigDecimal(N1) * N2
End Operator
Public Shared Operator *(ByVal N1 As BigDecimal, ByVal N2 As Long) As BigDecimal
Return N1 * New BigDecimal(N2)
End Operator
Public Shared Operator *(ByVal N1 As Long, ByVal N2 As BigDecimal) As BigDecimal
Return New BigDecimal(N1) * N2
End Operator
Public Shared Operator *(ByVal N1 As BigDecimal, ByVal N2 As Single) As BigDecimal
Return N1 * New BigDecimal(N2)
End Operator
Public Shared Operator *(ByVal N1 As Single, ByVal N2 As BigDecimal) As BigDecimal
Return New BigDecimal(N1) * N2
End Operator
Public Shared Operator *(ByVal N1 As BigDecimal, ByVal N2 As UInteger) As BigDecimal
Return N1 * New BigDecimal(N2)
End Operator
Public Shared Operator *(ByVal N1 As UInteger, ByVal N2 As BigDecimal) As BigDecimal
Return New BigDecimal(N1) * N2
End Operator
Public Shared Operator *(ByVal N1 As BigDecimal, ByVal N2 As ULong) As BigDecimal
Return N1 * New BigDecimal(N2)
End Operator
Public Shared Operator *(ByVal N1 As ULong, ByVal N2 As BigDecimal) As BigDecimal
Return New BigDecimal(N1) * N2
End Operator
Public Shared Operator *(ByVal N1 As BigDecimal, ByVal N2 As UShort) As BigDecimal
Return N1 * New BigDecimal(N2)
End Operator
Public Shared Operator *(ByVal N1 As UShort, ByVal N2 As BigDecimal) As BigDecimal
Return New BigDecimal(N1) * N2
End Operator
Public Shared Operator *(ByVal N1 As BigDecimal, ByVal N2 As Byte) As BigDecimal
Return N1 * New BigDecimal(N2)
End Operator
Public Shared Operator *(ByVal N1 As Byte, ByVal N2 As BigDecimal) As BigDecimal
Return New BigDecimal(N1) * N2
End Operator
Public Shared Operator *(ByVal N1 As BigDecimal, ByVal N2 As SByte) As BigDecimal
Return N1 * New BigDecimal(N2)
End Operator
Public Shared Operator *(ByVal N1 As SByte, ByVal N2 As BigDecimal) As BigDecimal
Return New BigDecimal(N1) * N2
End Operator
Public Shared Operator *(ByVal N1 As BigDecimal, ByVal N2 As Short) As BigDecimal
Return N1 * New BigDecimal(N2)
End Operator
Public Shared Operator *(ByVal N1 As Short, ByVal N2 As BigDecimal) As BigDecimal
Return New BigDecimal(N1) * N2
End Operator
#End Region
#Region "/"
Public Shared Function Div(ByVal N1 As BigDecimal, ByVal N2 As BigDecimal, _
Optional ByVal P As Integer = -1) As BigDecimal
If P < 0 Then P = _P
Dim D As Integer = Math.Abs(N1.MLen - N2.MLen)
If N1.MLen >= N2.MLen Then
N1.Value *= BigInteger.Pow(10, P)
N2.Value *= BigInteger.Pow(10, D)
Else
N1.Value *= BigInteger.Pow(10, D + P)
End If
N1.Value /= N2.Value
Return New BigDecimal(N1.Value, P)
End Function
Public Shared Operator /(ByVal N1 As BigDecimal, ByVal N2 As BigDecimal) As BigDecimal
Return Div(N1, N2)
End Operator
Public Shared Operator /(ByVal N1 As BigDecimal, ByVal N2 As String) As BigDecimal
Return Div(N1, New BigDecimal(N2))
End Operator
Public Shared Operator /(ByVal N1 As String, ByVal N2 As BigDecimal) As BigDecimal
Return Div(New BigDecimal(N1), N2)
End Operator
Public Shared Operator /(ByVal N1 As BigDecimal, ByVal N2 As BigInteger) As BigDecimal
Return Div(N1, New BigDecimal(N2))
End Operator
Public Shared Operator /(ByVal N1 As BigInteger, ByVal N2 As BigDecimal) As BigDecimal
Return Div(New BigDecimal(N1), N2)
End Operator
Public Shared Operator /(ByVal N1 As BigDecimal, ByVal N2 As Decimal) As BigDecimal
Return Div(N1, New BigDecimal(N2))
End Operator
Public Shared Operator /(ByVal N1 As Decimal, ByVal N2 As BigDecimal) As BigDecimal
Return Div(New BigDecimal(N1), N2)
End Operator
Public Shared Operator /(ByVal N1 As BigDecimal, ByVal N2 As Double) As BigDecimal
Return Div(N1, New BigDecimal(N2))
End Operator
Public Shared Operator /(ByVal N1 As Double, ByVal N2 As BigDecimal) As BigDecimal
Return Div(New BigDecimal(N1), N2)
End Operator
Public Shared Operator /(ByVal N1 As BigDecimal, ByVal N2 As Integer) As BigDecimal
Return Div(N1, New BigDecimal(N2))
End Operator
Public Shared Operator /(ByVal N1 As Integer, ByVal N2 As BigDecimal) As BigDecimal
Return Div(New BigDecimal(N1), N2)
End Operator
Public Shared Operator /(ByVal N1 As BigDecimal, ByVal N2 As Long) As BigDecimal
Return Div(N1, New BigDecimal(N2))
End Operator
Public Shared Operator /(ByVal N1 As Long, ByVal N2 As BigDecimal) As BigDecimal
Return Div(New BigDecimal(N1), N2)
End Operator
Public Shared Operator /(ByVal N1 As BigDecimal, ByVal N2 As Single) As BigDecimal
Return Div(N1, New BigDecimal(N2))
End Operator
Public Shared Operator /(ByVal N1 As Single, ByVal N2 As BigDecimal) As BigDecimal
Return Div(New BigDecimal(N1), N2)
End Operator
Public Shared Operator /(ByVal N1 As BigDecimal, ByVal N2 As UInteger) As BigDecimal
Return Div(N1, New BigDecimal(N2))
End Operator
Public Shared Operator /(ByVal N1 As UInteger, ByVal N2 As BigDecimal) As BigDecimal
Return Div(New BigDecimal(N1), N2)
End Operator
Public Shared Operator /(ByVal N1 As BigDecimal, ByVal N2 As ULong) As BigDecimal
Return Div(N1, New BigDecimal(N2))
End Operator
Public Shared Operator /(ByVal N1 As ULong, ByVal N2 As BigDecimal) As BigDecimal
Return Div(New BigDecimal(N1), N2)
End Operator
Public Shared Operator /(ByVal N1 As BigDecimal, ByVal N2 As UShort) As BigDecimal
Return Div(N1, New BigDecimal(N2))
End Operator
Public Shared Operator /(ByVal N1 As UShort, ByVal N2 As BigDecimal) As BigDecimal
Return Div(New BigDecimal(N1), N2)
End Operator
Public Shared Operator /(ByVal N1 As BigDecimal, ByVal N2 As Byte) As BigDecimal
Return Div(N1, New BigDecimal(N2))
End Operator
Public Shared Operator /(ByVal N1 As Byte, ByVal N2 As BigDecimal) As BigDecimal
Return Div(New BigDecimal(N1), N2)
End Operator
Public Shared Operator /(ByVal N1 As BigDecimal, ByVal N2 As SByte) As BigDecimal
Return Div(N1, New BigDecimal(N2))
End Operator
Public Shared Operator /(ByVal N1 As SByte, ByVal N2 As BigDecimal) As BigDecimal
Return Div(New BigDecimal(N1), N2)
End Operator
Public Shared Operator /(ByVal N1 As BigDecimal, ByVal N2 As Short) As BigDecimal
Return Div(N1, New BigDecimal(N2))
End Operator
Public Shared Operator /(ByVal N1 As Short, ByVal N2 As BigDecimal) As BigDecimal
Return Div(New BigDecimal(N1), N2)
End Operator
#End Region
#Region "^"
Public Shared Function Pow(ByVal N1 As BigDecimal, ByVal N2 As Integer,
Optional ByVal P As Integer = -1) As BigDecimal
If N2 = 0 Then Return One
If P < 0 Then P = _P
If N2 < 0 Then
N2 = Math.Abs(N2)
Return Div(One, New BigDecimal(BigInteger.Pow(N1.Value, N2), N1.MLen * N2), P)
Else
Return Div(New BigDecimal(BigInteger.Pow(N1.Value, N2), N2 * N1.MLen), One, P)
End If
End Function
Public Shared Operator ^(ByVal N1 As BigDecimal, ByVal N2 As Integer) As BigDecimal
Return Pow(N1, N2)
End Operator
#End Region
#Region "Mod"
Public Shared Operator Mod(ByVal N1 As BigDecimal, ByVal N2 As BigDecimal) As BigDecimal
If N2.Value.IsZero Then Throw New DivideByZeroException
If N1 = One Then Return Zero
If N1 = N2 Then Return Zero
If N1.MLen >= N2.MLen _
Then Return N1 - N2 * Floor(Div(N1, N2, N1.MLen)) _
Else Return N1 - N2 * Floor(Div(N1, N2, N2.MLen))
End Operator
Public Shared Operator Mod(ByVal N1 As BigDecimal, ByVal N2 As String) As BigDecimal
Return N1 Mod New BigDecimal(N2)
End Operator
Public Shared Operator Mod(ByVal N1 As String, ByVal N2 As BigDecimal) As BigDecimal
Return New BigDecimal(N1) Mod N2
End Operator
Public Shared Operator Mod(ByVal N1 As BigDecimal, ByVal N2 As BigInteger) As BigDecimal
Return N1 Mod New BigDecimal(N2)
End Operator
Public Shared Operator Mod(ByVal N1 As BigInteger, ByVal N2 As BigDecimal) As BigDecimal
Return New BigDecimal(N1) Mod N2
End Operator
Public Shared Operator Mod(ByVal N1 As BigDecimal, ByVal N2 As Decimal) As BigDecimal
Return N1 Mod New BigDecimal(N2)
End Operator
Public Shared Operator Mod(ByVal N1 As Decimal, ByVal N2 As BigDecimal) As BigDecimal
Return New BigDecimal(N1) Mod N2
End Operator
Public Shared Operator Mod(ByVal N1 As BigDecimal, ByVal N2 As Double) As BigDecimal
Return N1 Mod New BigDecimal(N2)
End Operator
Public Shared Operator Mod(ByVal N1 As Double, ByVal N2 As BigDecimal) As BigDecimal
Return New BigDecimal(N1) Mod N2
End Operator
Public Shared Operator Mod(ByVal N1 As BigDecimal, ByVal N2 As Integer) As BigDecimal
Return N1 Mod New BigDecimal(N2)
End Operator
Public Shared Operator Mod(ByVal N1 As Integer, ByVal N2 As BigDecimal) As BigDecimal
Return New BigDecimal(N1) Mod N2
End Operator
Public Shared Operator Mod(ByVal N1 As BigDecimal, ByVal N2 As Long) As BigDecimal
Return N1 Mod New BigDecimal(N2)
End Operator
Public Shared Operator Mod(ByVal N1 As Long, ByVal N2 As BigDecimal) As BigDecimal
Return New BigDecimal(N1) Mod N2
End Operator
Public Shared Operator Mod(ByVal N1 As BigDecimal, ByVal N2 As Single) As BigDecimal
Return N1 Mod New BigDecimal(N2)
End Operator
Public Shared Operator Mod(ByVal N1 As Single, ByVal N2 As BigDecimal) As BigDecimal
Return New BigDecimal(N1) Mod N2
End Operator
Public Shared Operator Mod(ByVal N1 As BigDecimal, ByVal N2 As UInteger) As BigDecimal
Return N1 Mod New BigDecimal(N2)
End Operator
Public Shared Operator Mod(ByVal N1 As UInteger, ByVal N2 As BigDecimal) As BigDecimal
Return New BigDecimal(N1) Mod N2
End Operator
Public Shared Operator Mod(ByVal N1 As BigDecimal, ByVal N2 As ULong) As BigDecimal
Return N1 Mod New BigDecimal(N2)
End Operator
Public Shared Operator Mod(ByVal N1 As ULong, ByVal N2 As BigDecimal) As BigDecimal
Return New BigDecimal(N1) Mod N2
End Operator
Public Shared Operator Mod(ByVal N1 As BigDecimal, ByVal N2 As UShort) As BigDecimal
Return N1 Mod New BigDecimal(N2)
End Operator
Public Shared Operator Mod(ByVal N1 As UShort, ByVal N2 As BigDecimal) As BigDecimal
Return New BigDecimal(N1) Mod N2
End Operator
Public Shared Operator Mod(ByVal N1 As BigDecimal, ByVal N2 As Byte) As BigDecimal
Return N1 Mod New BigDecimal(N2)
End Operator
Public Shared Operator Mod(ByVal N1 As Byte, ByVal N2 As BigDecimal) As BigDecimal
Return New BigDecimal(N1) Mod N2
End Operator
Public Shared Operator Mod(ByVal N1 As BigDecimal, ByVal N2 As SByte) As BigDecimal
Return N1 Mod New BigDecimal(N2)
End Operator
Public Shared Operator Mod(ByVal N1 As SByte, ByVal N2 As BigDecimal) As BigDecimal
Return New BigDecimal(N1) Mod N2
End Operator
Public Shared Operator Mod(ByVal N1 As BigDecimal, ByVal N2 As Short) As BigDecimal
Return N1 Mod New BigDecimal(N2)
End Operator
Public Shared Operator Mod(ByVal N1 As Short, ByVal N2 As BigDecimal) As BigDecimal
Return New BigDecimal(N1) Mod N2
End Operator
#End Region
#Region "="
Public Shared Operator =(ByVal N1 As BigDecimal, ByVal N2 As BigDecimal) As Boolean
If N1.MLen = N2.MLen AndAlso N1.Value = N2.Value Then Return True Else Return False
End Operator
Public Shared Operator =(ByVal N1 As BigDecimal, ByVal N2 As String) As Boolean
Return N1 = New BigDecimal(N2)
End Operator
Public Shared Operator =(ByVal N1 As String, ByVal N2 As BigDecimal) As Boolean
Return New BigDecimal(N1) = N2
End Operator
Public Shared Operator =(ByVal N1 As BigDecimal, ByVal N2 As BigInteger) As Boolean
Return N1 = New BigDecimal(N2)
End Operator
Public Shared Operator =(ByVal N1 As BigInteger, ByVal N2 As BigDecimal) As Boolean
Return New BigDecimal(N1) = N2
End Operator
Public Shared Operator =(ByVal N1 As BigDecimal, ByVal N2 As Decimal) As Boolean
Return N1 = New BigDecimal(N2)
End Operator
Public Shared Operator =(ByVal N1 As Decimal, ByVal N2 As BigDecimal) As Boolean
Return New BigDecimal(N1) = N2
End Operator
Public Shared Operator =(ByVal N1 As BigDecimal, ByVal N2 As Double) As Boolean
Return N1 = New BigDecimal(N2)
End Operator
Public Shared Operator =(ByVal N1 As Double, ByVal N2 As BigDecimal) As Boolean
Return New BigDecimal(N1) = N2
End Operator
Public Shared Operator =(ByVal N1 As BigDecimal, ByVal N2 As Integer) As Boolean
Return N1 = New BigDecimal(N2)
End Operator
Public Shared Operator =(ByVal N1 As Integer, ByVal N2 As BigDecimal) As Boolean
Return New BigDecimal(N1) = N2
End Operator
Public Shared Operator =(ByVal N1 As BigDecimal, ByVal N2 As Long) As Boolean
Return N1 = New BigDecimal(N2)
End Operator
Public Shared Operator =(ByVal N1 As Long, ByVal N2 As BigDecimal) As Boolean
Return New BigDecimal(N1) = N2
End Operator
Public Shared Operator =(ByVal N1 As BigDecimal, ByVal N2 As Single) As Boolean
Return N1 = New BigDecimal(N2)
End Operator
Public Shared Operator =(ByVal N1 As Single, ByVal N2 As BigDecimal) As Boolean
Return New BigDecimal(N1) = N2
End Operator
Public Shared Operator =(ByVal N1 As BigDecimal, ByVal N2 As UInteger) As Boolean
Return N1 = New BigDecimal(N2)
End Operator
Public Shared Operator =(ByVal N1 As UInteger, ByVal N2 As BigDecimal) As Boolean
Return New BigDecimal(N1) = N2
End Operator
Public Shared Operator =(ByVal N1 As BigDecimal, ByVal N2 As ULong) As Boolean
Return N1 = New BigDecimal(N2)
End Operator
Public Shared Operator =(ByVal N1 As ULong, ByVal N2 As BigDecimal) As Boolean
Return New BigDecimal(N1) = N2
End Operator
Public Shared Operator =(ByVal N1 As BigDecimal, ByVal N2 As UShort) As Boolean
Return N1 = New BigDecimal(N2)
End Operator
Public Shared Operator =(ByVal N1 As UShort, ByVal N2 As BigDecimal) As Boolean
Return New BigDecimal(N1) = N2
End Operator
Public Shared Operator =(ByVal N1 As BigDecimal, ByVal N2 As Byte) As Boolean
Return N1 = New BigDecimal(N2)
End Operator
Public Shared Operator =(ByVal N1 As Byte, ByVal N2 As BigDecimal) As Boolean
Return New BigDecimal(N1) = N2
End Operator
Public Shared Operator =(ByVal N1 As BigDecimal, ByVal N2 As SByte) As Boolean
Return N1 = New BigDecimal(N2)
End Operator
Public Shared Operator =(ByVal N1 As SByte, ByVal N2 As BigDecimal) As Boolean
Return New BigDecimal(N1) = N2
End Operator
Public Shared Operator =(ByVal N1 As BigDecimal, ByVal N2 As Short) As Boolean
Return N1 = New BigDecimal(N2)
End Operator
Public Shared Operator =(ByVal N1 As Short, ByVal N2 As BigDecimal) As Boolean
Return New BigDecimal(N1) = N2
End Operator
#End Region
#Region "<>"
Public Shared Operator <>(ByVal N1 As BigDecimal, ByVal N2 As BigDecimal) As Boolean
If N1.MLen <> N2.MLen OrElse N1.Value <> N2.Value Then Return True Else Return False
End Operator
Public Shared Operator <>(ByVal N1 As BigDecimal, ByVal N2 As String) As Boolean
Return N1 <> New BigDecimal(N2)
End Operator
Public Shared Operator <>(ByVal N1 As String, ByVal N2 As BigDecimal) As Boolean
Return New BigDecimal(N1) <> N2
End Operator
Public Shared Operator <>(ByVal N1 As BigDecimal, ByVal N2 As BigInteger) As Boolean
Return N1 <> New BigDecimal(N2)
End Operator
Public Shared Operator <>(ByVal N1 As BigInteger, ByVal N2 As BigDecimal) As Boolean
Return New BigDecimal(N1) <> N2
End Operator
Public Shared Operator <>(ByVal N1 As BigDecimal, ByVal N2 As Decimal) As Boolean
Return N1 <> New BigDecimal(N2)
End Operator
Public Shared Operator <>(ByVal N1 As Decimal, ByVal N2 As BigDecimal) As Boolean
Return New BigDecimal(N1) <> N2
End Operator
Public Shared Operator <>(ByVal N1 As BigDecimal, ByVal N2 As Double) As Boolean
Return N1 <> New BigDecimal(N2)
End Operator
Public Shared Operator <>(ByVal N1 As Double, ByVal N2 As BigDecimal) As Boolean
Return New BigDecimal(N1) <> N2
End Operator
Public Shared Operator <>(ByVal N1 As BigDecimal, ByVal N2 As Integer) As Boolean
Return N1 <> New BigDecimal(N2)
End Operator
Public Shared Operator <>(ByVal N1 As Integer, ByVal N2 As BigDecimal) As Boolean
Return New BigDecimal(N1) <> N2
End Operator
Public Shared Operator <>(ByVal N1 As BigDecimal, ByVal N2 As Long) As Boolean
Return N1 <> New BigDecimal(N2)
End Operator
Public Shared Operator <>(ByVal N1 As Long, ByVal N2 As BigDecimal) As Boolean
Return New BigDecimal(N1) <> N2
End Operator
Public Shared Operator <>(ByVal N1 As BigDecimal, ByVal N2 As Single) As Boolean
Return N1 <> New BigDecimal(N2)
End Operator
Public Shared Operator <>(ByVal N1 As Single, ByVal N2 As BigDecimal) As Boolean
Return New BigDecimal(N1) <> N2
End Operator
Public Shared Operator <>(ByVal N1 As BigDecimal, ByVal N2 As UInteger) As Boolean
Return N1 <> New BigDecimal(N2)
End Operator
Public Shared Operator <>(ByVal N1 As UInteger, ByVal N2 As BigDecimal) As Boolean
Return New BigDecimal(N1) <> N2
End Operator
Public Shared Operator <>(ByVal N1 As BigDecimal, ByVal N2 As ULong) As Boolean
Return N1 <> New BigDecimal(N2)
End Operator
Public Shared Operator <>(ByVal N1 As ULong, ByVal N2 As BigDecimal) As Boolean
Return New BigDecimal(N1) <> N2
End Operator
Public Shared Operator <>(ByVal N1 As BigDecimal, ByVal N2 As UShort) As Boolean
Return N1 <> New BigDecimal(N2)
End Operator
Public Shared Operator <>(ByVal N1 As UShort, ByVal N2 As BigDecimal) As Boolean
Return New BigDecimal(N1) <> N2
End Operator
Public Shared Operator <>(ByVal N1 As BigDecimal, ByVal N2 As Byte) As Boolean
Return N1 <> New BigDecimal(N2)
End Operator
Public Shared Operator <>(ByVal N1 As Byte, ByVal N2 As BigDecimal) As Boolean
Return New BigDecimal(N1) <> N2
End Operator
Public Shared Operator <>(ByVal N1 As BigDecimal, ByVal N2 As SByte) As Boolean
Return N1 <> New BigDecimal(N2)
End Operator
Public Shared Operator <>(ByVal N1 As SByte, ByVal N2 As BigDecimal) As Boolean
Return New BigDecimal(N1) <> N2
End Operator
Public Shared Operator <>(ByVal N1 As BigDecimal, ByVal N2 As Short) As Boolean
Return N1 <> New BigDecimal(N2)
End Operator
Public Shared Operator <>(ByVal N1 As Short, ByVal N2 As BigDecimal) As Boolean
Return New BigDecimal(N1) <> N2
End Operator
#End Region
#Region ">"
Public Shared Operator >(ByVal N1 As BigDecimal, ByVal N2 As BigDecimal) As Boolean
If Compare(N1, N2) = 1 Then Return True
Return False
End Operator
Public Shared Operator >(ByVal N1 As BigDecimal, ByVal N2 As String) As Boolean
If Compare(N1, N2) = 1 Then Return True
Return False
End Operator
Public Shared Operator >(ByVal N1 As String, ByVal N2 As BigDecimal) As Boolean
If Compare(N1, N2) = 1 Then Return True
Return False
End Operator
Public Shared Operator >(ByVal N1 As BigDecimal, ByVal N2 As BigInteger) As Boolean
If Compare(N1, N2) = 1 Then Return True
Return False
End Operator
Public Shared Operator >(ByVal N1 As BigInteger, ByVal N2 As BigDecimal) As Boolean
If Compare(N1, N2) = 1 Then Return True
Return False
End Operator
Public Shared Operator >(ByVal N1 As BigDecimal, ByVal N2 As Decimal) As Boolean
If Compare(N1, N2) = 1 Then Return True
Return False
End Operator
Public Shared Operator >(ByVal N1 As Decimal, ByVal N2 As BigDecimal) As Boolean
If Compare(N1, N2) = 1 Then Return True
Return False
End Operator
Public Shared Operator >(ByVal N1 As BigDecimal, ByVal N2 As Double) As Boolean
If Compare(N1, N2) = 1 Then Return True
Return False
End Operator
Public Shared Operator >(ByVal N1 As Double, ByVal N2 As BigDecimal) As Boolean
If Compare(N1, N2) = 1 Then Return True
Return False
End Operator
Public Shared Operator >(ByVal N1 As BigDecimal, ByVal N2 As Integer) As Boolean
If Compare(N1, N2) = 1 Then Return True
Return False
End Operator
Public Shared Operator >(ByVal N1 As Integer, ByVal N2 As BigDecimal) As Boolean
If Compare(N1, N2) = 1 Then Return True
Return False
End Operator
Public Shared Operator >(ByVal N1 As BigDecimal, ByVal N2 As Long) As Boolean
If Compare(N1, N2) = 1 Then Return True
Return False
End Operator
Public Shared Operator >(ByVal N1 As Long, ByVal N2 As BigDecimal) As Boolean
If Compare(N1, N2) = 1 Then Return True
Return False
End Operator
Public Shared Operator >(ByVal N1 As BigDecimal, ByVal N2 As Single) As Boolean
If Compare(N1, N2) = 1 Then Return True
Return False
End Operator
Public Shared Operator >(ByVal N1 As Single, ByVal N2 As BigDecimal) As Boolean
If Compare(N1, N2) = 1 Then Return True
Return False
End Operator
Public Shared Operator >(ByVal N1 As BigDecimal, ByVal N2 As UInteger) As Boolean
If Compare(N1, N2) = 1 Then Return True
Return False
End Operator
Public Shared Operator >(ByVal N1 As UInteger, ByVal N2 As BigDecimal) As Boolean
If Compare(N1, N2) = 1 Then Return True
Return False
End Operator
Public Shared Operator >(ByVal N1 As BigDecimal, ByVal N2 As ULong) As Boolean
If Compare(N1, N2) = 1 Then Return True
Return False
End Operator
Public Shared Operator >(ByVal N1 As ULong, ByVal N2 As BigDecimal) As Boolean
If Compare(N1, N2) = 1 Then Return True
Return False
End Operator
Public Shared Operator >(ByVal N1 As BigDecimal, ByVal N2 As UShort) As Boolean
If Compare(N1, N2) = 1 Then Return True
Return False
End Operator
Public Shared Operator >(ByVal N1 As UShort, ByVal N2 As BigDecimal) As Boolean
If Compare(N1, N2) = 1 Then Return True
Return False
End Operator
Public Shared Operator >(ByVal N1 As BigDecimal, ByVal N2 As Byte) As Boolean
If Compare(N1, N2) = 1 Then Return True
Return False
End Operator
Public Shared Operator >(ByVal N1 As Byte, ByVal N2 As BigDecimal) As Boolean
If Compare(N1, N2) = 1 Then Return True
Return False
End Operator
Public Shared Operator >(ByVal N1 As BigDecimal, ByVal N2 As SByte) As Boolean
If Compare(N1, N2) = 1 Then Return True
Return False
End Operator
Public Shared Operator >(ByVal N1 As SByte, ByVal N2 As BigDecimal) As Boolean
If Compare(N1, N2) = 1 Then Return True
Return False
End Operator
Public Shared Operator >(ByVal N1 As BigDecimal, ByVal N2 As Short) As Boolean
If Compare(N1, N2) = 1 Then Return True
Return False
End Operator
Public Shared Operator >(ByVal N1 As Short, ByVal N2 As BigDecimal) As Boolean
If Compare(N1, N2) = 1 Then Return True
Return False
End Operator
#End Region
#Region "<"
Public Shared Operator <(ByVal N1 As BigDecimal, ByVal N2 As BigDecimal) As Boolean
If Compare(N1, N2) = -1 Then Return True
Return False
End Operator
Public Shared Operator <(ByVal N1 As BigDecimal, ByVal N2 As String) As Boolean
If Compare(N1, N2) = -1 Then Return True
Return False
End Operator
Public Shared Operator <(ByVal N1 As String, ByVal N2 As BigDecimal) As Boolean
If Compare(N1, N2) = -1 Then Return True
Return False
End Operator
Public Shared Operator <(ByVal N1 As BigDecimal, ByVal N2 As BigInteger) As Boolean
If Compare(N1, N2) = -1 Then Return True
Return False
End Operator
Public Shared Operator <(ByVal N1 As BigInteger, ByVal N2 As BigDecimal) As Boolean
If Compare(N1, N2) = -1 Then Return True
Return False
End Operator
Public Shared Operator <(ByVal N1 As BigDecimal, ByVal N2 As Decimal) As Boolean
If Compare(N1, N2) = -1 Then Return True
Return False
End Operator
Public Shared Operator <(ByVal N1 As Decimal, ByVal N2 As BigDecimal) As Boolean
If Compare(N1, N2) = -1 Then Return True
Return False
End Operator
Public Shared Operator <(ByVal N1 As BigDecimal, ByVal N2 As Double) As Boolean
If Compare(N1, N2) = -1 Then Return True
Return False
End Operator
Public Shared Operator <(ByVal N1 As Double, ByVal N2 As BigDecimal) As Boolean
If Compare(N1, N2) = -1 Then Return True
Return False
End Operator
Public Shared Operator <(ByVal N1 As BigDecimal, ByVal N2 As Integer) As Boolean
If Compare(N1, N2) = -1 Then Return True
Return False
End Operator
Public Shared Operator <(ByVal N1 As Integer, ByVal N2 As BigDecimal) As Boolean
If Compare(N1, N2) = -1 Then Return True
Return False
End Operator
Public Shared Operator <(ByVal N1 As BigDecimal, ByVal N2 As Long) As Boolean
If Compare(N1, N2) = -1 Then Return True
Return False
End Operator
Public Shared Operator <(ByVal N1 As Long, ByVal N2 As BigDecimal) As Boolean
If Compare(N1, N2) = -1 Then Return True
Return False
End Operator
Public Shared Operator <(ByVal N1 As BigDecimal, ByVal N2 As Single) As Boolean
If Compare(N1, N2) = -1 Then Return True
Return False
End Operator
Public Shared Operator <(ByVal N1 As Single, ByVal N2 As BigDecimal) As Boolean
If Compare(N1, N2) = -1 Then Return True
Return False
End Operator
Public Shared Operator <(ByVal N1 As BigDecimal, ByVal N2 As UInteger) As Boolean
If Compare(N1, N2) = -1 Then Return True
Return False
End Operator
Public Shared Operator <(ByVal N1 As UInteger, ByVal N2 As BigDecimal) As Boolean
If Compare(N1, N2) = -1 Then Return True
Return False
End Operator
Public Shared Operator <(ByVal N1 As BigDecimal, ByVal N2 As ULong) As Boolean
If Compare(N1, N2) = -1 Then Return True
Return False
End Operator
Public Shared Operator <(ByVal N1 As ULong, ByVal N2 As BigDecimal) As Boolean
If Compare(N1, N2) = -1 Then Return True
Return False
End Operator
Public Shared Operator <(ByVal N1 As BigDecimal, ByVal N2 As UShort) As Boolean
If Compare(N1, N2) = -1 Then Return True
Return False
End Operator
Public Shared Operator <(ByVal N1 As UShort, ByVal N2 As BigDecimal) As Boolean
If Compare(N1, N2) = -1 Then Return True
Return False
End Operator
Public Shared Operator <(ByVal N1 As BigDecimal, ByVal N2 As Byte) As Boolean
If Compare(N1, N2) = -1 Then Return True
Return False
End Operator
Public Shared Operator <(ByVal N1 As Byte, ByVal N2 As BigDecimal) As Boolean
If Compare(N1, N2) = -1 Then Return True
Return False
End Operator
Public Shared Operator <(ByVal N1 As BigDecimal, ByVal N2 As SByte) As Boolean
If Compare(N1, N2) = -1 Then Return True
Return False
End Operator
Public Shared Operator <(ByVal N1 As SByte, ByVal N2 As BigDecimal) As Boolean
If Compare(N1, N2) = -1 Then Return True
Return False
End Operator
Public Shared Operator <(ByVal N1 As BigDecimal, ByVal N2 As Short) As Boolean
If Compare(N1, N2) = -1 Then Return True
Return False
End Operator
Public Shared Operator <(ByVal N1 As Short, ByVal N2 As BigDecimal) As Boolean
If Compare(N1, N2) = -1 Then Return True
Return False
End Operator
#End Region
#Region ">="
Public Shared Operator >=(ByVal N1 As BigDecimal, ByVal N2 As BigDecimal) As Boolean
Dim R As Integer = Compare(N1, N2)
If R = 0 OrElse R = 1 Then Return True Else Return False
End Operator
Public Shared Operator >=(ByVal N1 As BigDecimal, ByVal N2 As String) As Boolean
Dim R As Integer = Compare(N1, N2)
If R = 0 OrElse R = 1 Then Return True Else Return False
End Operator
Public Shared Operator >=(ByVal N1 As String, ByVal N2 As BigDecimal) As Boolean
Dim R As Integer = Compare(N1, N2)
If R = 0 OrElse R = 1 Then Return True Else Return False
End Operator
Public Shared Operator >=(ByVal N1 As BigDecimal, ByVal N2 As BigInteger) As Boolean
Dim R As Integer = Compare(N1, N2)
If R = 0 OrElse R = 1 Then Return True Else Return False
End Operator
Public Shared Operator >=(ByVal N1 As BigInteger, ByVal N2 As BigDecimal) As Boolean
Dim R As Integer = Compare(N1, N2)
If R = 0 OrElse R = 1 Then Return True Else Return False
End Operator
Public Shared Operator >=(ByVal N1 As BigDecimal, ByVal N2 As Decimal) As Boolean
Dim R As Integer = Compare(N1, N2)
If R = 0 OrElse R = 1 Then Return True Else Return False
End Operator
Public Shared Operator >=(ByVal N1 As Decimal, ByVal N2 As BigDecimal) As Boolean
Dim R As Integer = Compare(N1, N2)
If R = 0 OrElse R = 1 Then Return True Else Return False
End Operator
Public Shared Operator >=(ByVal N1 As BigDecimal, ByVal N2 As Double) As Boolean
Dim R As Integer = Compare(N1, N2)
If R = 0 OrElse R = 1 Then Return True Else Return False
End Operator
Public Shared Operator >=(ByVal N1 As Double, ByVal N2 As BigDecimal) As Boolean
Dim R As Integer = Compare(N1, N2)
If R = 0 OrElse R = 1 Then Return True Else Return False
End Operator
Public Shared Operator >=(ByVal N1 As BigDecimal, ByVal N2 As Integer) As Boolean
Dim R As Integer = Compare(N1, N2)
If R = 0 OrElse R = 1 Then Return True Else Return False
End Operator
Public Shared Operator >=(ByVal N1 As Integer, ByVal N2 As BigDecimal) As Boolean
Dim R As Integer = Compare(N1, N2)
If R = 0 OrElse R = 1 Then Return True Else Return False
End Operator
Public Shared Operator >=(ByVal N1 As BigDecimal, ByVal N2 As Long) As Boolean
Dim R As Integer = Compare(N1, N2)
If R = 0 OrElse R = 1 Then Return True Else Return False
End Operator
Public Shared Operator >=(ByVal N1 As Long, ByVal N2 As BigDecimal) As Boolean
Dim R As Integer = Compare(N1, N2)
If R = 0 OrElse R = 1 Then Return True Else Return False
End Operator
Public Shared Operator >=(ByVal N1 As BigDecimal, ByVal N2 As Single) As Boolean
Dim R As Integer = Compare(N1, N2)
If R = 0 OrElse R = 1 Then Return True Else Return False
End Operator
Public Shared Operator >=(ByVal N1 As Single, ByVal N2 As BigDecimal) As Boolean
Dim R As Integer = Compare(N1, N2)
If R = 0 OrElse R = 1 Then Return True Else Return False
End Operator
Public Shared Operator >=(ByVal N1 As BigDecimal, ByVal N2 As UInteger) As Boolean
Dim R As Integer = Compare(N1, N2)
If R = 0 OrElse R = 1 Then Return True Else Return False
End Operator
Public Shared Operator >=(ByVal N1 As UInteger, ByVal N2 As BigDecimal) As Boolean
Dim R As Integer = Compare(N1, N2)
If R = 0 OrElse R = 1 Then Return True Else Return False
End Operator
Public Shared Operator >=(ByVal N1 As BigDecimal, ByVal N2 As ULong) As Boolean
Dim R As Integer = Compare(N1, N2)
If R = 0 OrElse R = 1 Then Return True Else Return False
End Operator
Public Shared Operator >=(ByVal N1 As ULong, ByVal N2 As BigDecimal) As Boolean
Dim R As Integer = Compare(N1, N2)
If R = 0 OrElse R = 1 Then Return True Else Return False
End Operator
Public Shared Operator >=(ByVal N1 As BigDecimal, ByVal N2 As UShort) As Boolean
Dim R As Integer = Compare(N1, N2)
If R = 0 OrElse R = 1 Then Return True Else Return False
End Operator
Public Shared Operator >=(ByVal N1 As UShort, ByVal N2 As BigDecimal) As Boolean
Dim R As Integer = Compare(N1, N2)
If R = 0 OrElse R = 1 Then Return True Else Return False
End Operator
Public Shared Operator >=(ByVal N1 As BigDecimal, ByVal N2 As Byte) As Boolean
Dim R As Integer = Compare(N1, N2)
If R = 0 OrElse R = 1 Then Return True Else Return False
End Operator
Public Shared Operator >=(ByVal N1 As Byte, ByVal N2 As BigDecimal) As Boolean
Dim R As Integer = Compare(N1, N2)
If R = 0 OrElse R = 1 Then Return True Else Return False
End Operator
Public Shared Operator >=(ByVal N1 As BigDecimal, ByVal N2 As SByte) As Boolean
Dim R As Integer = Compare(N1, N2)
If R = 0 OrElse R = 1 Then Return True Else Return False
End Operator
Public Shared Operator >=(ByVal N1 As SByte, ByVal N2 As BigDecimal) As Boolean
Dim R As Integer = Compare(N1, N2)
If R = 0 OrElse R = 1 Then Return True Else Return False
End Operator
Public Shared Operator >=(ByVal N1 As BigDecimal, ByVal N2 As Short) As Boolean
Dim R As Integer = Compare(N1, N2)
If R = 0 OrElse R = 1 Then Return True Else Return False
End Operator
Public Shared Operator >=(ByVal N1 As Short, ByVal N2 As BigDecimal) As Boolean
Dim R As Integer = Compare(N1, N2)
If R = 0 OrElse R = 1 Then Return True Else Return False
End Operator
#End Region
#Region "<="
Public Shared Operator <=(ByVal N1 As BigDecimal, ByVal N2 As BigDecimal) As Boolean
Dim R As Integer = Compare(N1, N2)
If R = 0 OrElse R = -1 Then Return True Else Return False
End Operator
Public Shared Operator <=(ByVal N1 As BigDecimal, ByVal N2 As String) As Boolean
Dim R As Integer = Compare(N1, N2)
If R = 0 OrElse R = -1 Then Return True Else Return False
End Operator
Public Shared Operator <=(ByVal N1 As String, ByVal N2 As BigDecimal) As Boolean
Dim R As Integer = Compare(N1, N2)
If R = 0 OrElse R = -1 Then Return True Else Return False
End Operator
Public Shared Operator <=(ByVal N1 As BigDecimal, ByVal N2 As BigInteger) As Boolean
Dim R As Integer = Compare(N1, N2)
If R = 0 OrElse R = -1 Then Return True Else Return False
End Operator
Public Shared Operator <=(ByVal N1 As BigInteger, ByVal N2 As BigDecimal) As Boolean
Dim R As Integer = Compare(N1, N2)
If R = 0 OrElse R = -1 Then Return True Else Return False
End Operator
Public Shared Operator <=(ByVal N1 As BigDecimal, ByVal N2 As Decimal) As Boolean
Dim R As Integer = Compare(N1, N2)
If R = 0 OrElse R = -1 Then Return True Else Return False
End Operator
Public Shared Operator <=(ByVal N1 As Decimal, ByVal N2 As BigDecimal) As Boolean
Dim R As Integer = Compare(N1, N2)
If R = 0 OrElse R = -1 Then Return True Else Return False
End Operator
Public Shared Operator <=(ByVal N1 As BigDecimal, ByVal N2 As Double) As Boolean
Dim R As Integer = Compare(N1, N2)
If R = 0 OrElse R = -1 Then Return True Else Return False
End Operator
Public Shared Operator <=(ByVal N1 As Double, ByVal N2 As BigDecimal) As Boolean
Dim R As Integer = Compare(N1, N2)
If R = 0 OrElse R = -1 Then Return True Else Return False
End Operator
Public Shared Operator <=(ByVal N1 As BigDecimal, ByVal N2 As Integer) As Boolean
Dim R As Integer = Compare(N1, N2)
If R = 0 OrElse R = -1 Then Return True Else Return False
End Operator
Public Shared Operator <=(ByVal N1 As Integer, ByVal N2 As BigDecimal) As Boolean
Dim R As Integer = Compare(N1, N2)
If R = 0 OrElse R = -1 Then Return True Else Return False
End Operator
Public Shared Operator <=(ByVal N1 As BigDecimal, ByVal N2 As Long) As Boolean
Dim R As Integer = Compare(N1, N2)
If R = 0 OrElse R = -1 Then Return True Else Return False
End Operator
Public Shared Operator <=(ByVal N1 As Long, ByVal N2 As BigDecimal) As Boolean
Dim R As Integer = Compare(N1, N2)
If R = 0 OrElse R = -1 Then Return True Else Return False
End Operator
Public Shared Operator <=(ByVal N1 As BigDecimal, ByVal N2 As Single) As Boolean
Dim R As Integer = Compare(N1, N2)
If R = 0 OrElse R = -1 Then Return True Else Return False
End Operator
Public Shared Operator <=(ByVal N1 As Single, ByVal N2 As BigDecimal) As Boolean
Dim R As Integer = Compare(N1, N2)
If R = 0 OrElse R = -1 Then Return True Else Return False
End Operator
Public Shared Operator <=(ByVal N1 As BigDecimal, ByVal N2 As UInteger) As Boolean
Dim R As Integer = Compare(N1, N2)
If R = 0 OrElse R = -1 Then Return True Else Return False
End Operator
Public Shared Operator <=(ByVal N1 As UInteger, ByVal N2 As BigDecimal) As Boolean
Dim R As Integer = Compare(N1, N2)
If R = 0 OrElse R = -1 Then Return True Else Return False
End Operator
Public Shared Operator <=(ByVal N1 As BigDecimal, ByVal N2 As ULong) As Boolean
Dim R As Integer = Compare(N1, N2)
If R = 0 OrElse R = -1 Then Return True Else Return False
End Operator
Public Shared Operator <=(ByVal N1 As ULong, ByVal N2 As BigDecimal) As Boolean
Dim R As Integer = Compare(N1, N2)
If R = 0 OrElse R = -1 Then Return True Else Return False
End Operator
Public Shared Operator <=(ByVal N1 As BigDecimal, ByVal N2 As UShort) As Boolean
Dim R As Integer = Compare(N1, N2)
If R = 0 OrElse R = -1 Then Return True Else Return False
End Operator
Public Shared Operator <=(ByVal N1 As UShort, ByVal N2 As BigDecimal) As Boolean
Dim R As Integer = Compare(N1, N2)
If R = 0 OrElse R = -1 Then Return True Else Return False
End Operator
Public Shared Operator <=(ByVal N1 As BigDecimal, ByVal N2 As Byte) As Boolean
Dim R As Integer = Compare(N1, N2)
If R = 0 OrElse R = -1 Then Return True Else Return False
End Operator
Public Shared Operator <=(ByVal N1 As Byte, ByVal N2 As BigDecimal) As Boolean
Dim R As Integer = Compare(N1, N2)
If R = 0 OrElse R = -1 Then Return True Else Return False
End Operator
Public Shared Operator <=(ByVal N1 As BigDecimal, ByVal N2 As SByte) As Boolean
Dim R As Integer = Compare(N1, N2)
If R = 0 OrElse R = -1 Then Return True Else Return False
End Operator
Public Shared Operator <=(ByVal N1 As SByte, ByVal N2 As BigDecimal) As Boolean
Dim R As Integer = Compare(N1, N2)
If R = 0 OrElse R = -1 Then Return True Else Return False
End Operator
Public Shared Operator <=(ByVal N1 As BigDecimal, ByVal N2 As Short) As Boolean
Dim R As Integer = Compare(N1, N2)
If R = 0 OrElse R = -1 Then Return True Else Return False
End Operator
Public Shared Operator <=(ByVal N1 As Short, ByVal N2 As BigDecimal) As Boolean
Dim R As Integer = Compare(N1, N2)
If R = 0 OrElse R = -1 Then Return True Else Return False
End Operator
#End Region
#Region "General Functions"
Private Shared Function FormatString(ByVal N As String) As String
If N = "" Then Return "0"
Dim RetStr As String
If N.StartsWith("-") Then RetStr = "-" Else RetStr = ""
Dim Point As Boolean = True
For Each c As Char In N
Select Case c
Case "0"c To "9"c
RetStr &= c
Case "."c
If Point Then
RetStr &= "."
Point = False
End If
End Select
Next
If RetStr = "" Then Return "0"
Return RetStr
End Function
Public Function ToByteArray() As Byte()
Dim RBytes As New List(Of Byte)
RBytes.AddRange(BitConverter.GetBytes(MLen))
RBytes.AddRange(Value.ToByteArray)
Return RBytes.ToArray
End Function
Public Shared Function Compare(ByVal N1 As BigDecimal, ByVal N2 As BigDecimal) As Integer
If N1.Sign > N2.Sign Then Return 1
If N1.Sign < N2.Sign Then Return -1
If N1.MLen = N2.MLen Then
If N1.Value = N2.Value Then Return 0
If N1.Value < N2.Value Then Return -1
If N1.Value > N2.Value Then Return 1
End If
If N1.MLen > N2.MLen _
Then N2.Value *= BigInteger.Pow(10, N1.MLen) _
Else N1.Value *= BigInteger.Pow(10, N2.MLen)
If N1.Value < N2.Value Then Return -1 Else Return 1
End Function
Public Shared Function Compare(ByVal N1 As BigDecimal, ByVal N2 As String) As Integer
Return Compare(N1, New BigDecimal(N2))
End Function
Public Shared Function Compare(ByVal N1 As String, ByVal N2 As BigDecimal) As Integer
Return Compare(New BigDecimal(N1), N2)
End Function
Public Shared Function Compare(ByVal N1 As BigDecimal, ByVal N2 As BigInteger) As Integer
Return Compare(N1, New BigDecimal(N2))
End Function
Public Shared Function Compare(ByVal N1 As BigInteger, ByVal N2 As BigDecimal) As Integer
Return Compare(New BigDecimal(N1), N2)
End Function
Public Shared Function Compare(ByVal N1 As BigDecimal, ByVal N2 As Decimal) As Integer
Return Compare(N1, New BigDecimal(N2))
End Function
Public Shared Function Compare(ByVal N1 As Decimal, ByVal N2 As BigDecimal) As Integer
Return Compare(New BigDecimal(N1), N2)
End Function
Public Shared Function Compare(ByVal N1 As BigDecimal, ByVal N2 As Double) As Integer
Return Compare(N1, New BigDecimal(N2))
End Function
Public Shared Function Compare(ByVal N1 As Double, ByVal N2 As BigDecimal) As Integer
Return Compare(New BigDecimal(N1), N2)
End Function
Public Shared Function Compare(ByVal N1 As BigDecimal, ByVal N2 As Integer) As Integer
Return Compare(N1, New BigDecimal(N2))
End Function
Public Shared Function Compare(ByVal N1 As Integer, ByVal N2 As BigDecimal) As Integer
Return Compare(New BigDecimal(N1), N2)
End Function
Public Shared Function Compare(ByVal N1 As BigDecimal, ByVal N2 As Long) As Integer
Return Compare(N1, New BigDecimal(N2))
End Function
Public Shared Function Compare(ByVal N1 As Long, ByVal N2 As BigDecimal) As Integer
Return Compare(New BigDecimal(N1), N2)
End Function
Public Shared Function Compare(ByVal N1 As BigDecimal, ByVal N2 As Single) As Integer
Return Compare(N1, New BigDecimal(N2))
End Function
Public Shared Function Compare(ByVal N1 As Single, ByVal N2 As BigDecimal) As Integer
Return Compare(New BigDecimal(N1), N2)
End Function
Public Shared Function Compare(ByVal N1 As BigDecimal, ByVal N2 As UInteger) As Integer
Return Compare(N1, New BigDecimal(N2))
End Function
Public Shared Function Compare(ByVal N1 As UInteger, ByVal N2 As BigDecimal) As Integer
Return Compare(New BigDecimal(N1), N2)
End Function
Public Shared Function Compare(ByVal N1 As BigDecimal, ByVal N2 As ULong) As Integer
Return Compare(N1, New BigDecimal(N2))
End Function
Public Shared Function Compare(ByVal N1 As ULong, ByVal N2 As BigDecimal) As Integer
Return Compare(New BigDecimal(N1), N2)
End Function
Public Shared Function Compare(ByVal N1 As BigDecimal, ByVal N2 As Short) As Integer
Return Compare(N1, New BigDecimal(N2))
End Function
Public Shared Function Compare(ByVal N1 As Short, ByVal N2 As BigDecimal) As Integer
Return Compare(New BigDecimal(N1), N2)
End Function
Public Shared Function Compare(ByVal N1 As BigDecimal, ByVal N2 As UShort) As Integer
Return Compare(N1, New BigDecimal(N2))
End Function
Public Shared Function Compare(ByVal N1 As UShort, ByVal N2 As BigDecimal) As Integer
Return Compare(New BigDecimal(N1), N2)
End Function
Public Shared Function Compare(ByVal N1 As BigDecimal, ByVal N2 As Byte) As Integer
Return Compare(N1, New BigDecimal(N2))
End Function
Public Shared Function Compare(ByVal N1 As Byte, ByVal N2 As BigDecimal) As Integer
Return Compare(New BigDecimal(N1), N2)
End Function
Public Shared Function Compare(ByVal N1 As BigDecimal, ByVal N2 As SByte) As Integer
Return Compare(N1, New BigDecimal(N2))
End Function
Public Shared Function Compare(ByVal N1 As SByte, ByVal N2 As BigDecimal) As Integer
Return Compare(New BigDecimal(N1), N2)
End Function
Public Function CompareTo(ByVal N2 As BigDecimal) As Integer
Return Compare(Me, N2)
End Function
Public Function CompareTo(ByVal N2 As String) As Integer
Return Compare(Me, N2)
End Function
Public Function CompareTo(ByVal N2 As BigInteger) As Integer
Return Compare(Me, N2)
End Function
Public Function CompareTo(ByVal N2 As Decimal) As Integer
Return Compare(Me, N2)
End Function
Public Function CompareTo(ByVal N2 As Double) As Integer
Return Compare(Me, N2)
End Function
Public Function CompareTo(ByVal N2 As Integer) As Integer
Return Compare(Me, N2)
End Function
Public Function CompareTo(ByVal N2 As Long) As Integer
Return Compare(Me, N2)
End Function
Public Function CompareTo(ByVal N2 As Single) As Integer
Return Compare(Me, N2)
End Function
Public Function CompareTo(ByVal N2 As UInteger) As Integer
Return Compare(Me, N2)
End Function
Public Function CompareTo(ByVal N2 As ULong) As Integer
Return Compare(Me, N2)
End Function
Public Function CompareTo(ByVal N2 As Short) As Integer
Return Compare(Me, N2)
End Function
Public Function CompareTo(ByVal N2 As UShort) As Integer
Return Compare(Me, N2)
End Function
Public Function CompareTo(ByVal N2 As Byte) As Integer
Return Compare(Me, N2)
End Function
Public Function CompareTo(ByVal N2 As SByte) As Integer
Return Compare(Me, N2)
End Function
Public Shared Function Abs(ByVal N As BigDecimal) As BigDecimal
If N.Sign = -1 Then Return N * N.Sign
Return N
End Function
Public Shared Function Floor(ByVal N As BigDecimal) As BigDecimal
If N.Sign = -1 _
Then Return New BigDecimal(N.Value / BigInteger.Pow(10, N.MLen) - 1) _
Else Return New BigDecimal(N.Value / BigInteger.Pow(10, N.MLen))
End Function
Public Shared Function Ceiling(ByVal N As BigDecimal) As BigDecimal
If N.Sign = -1 _
Then Return New BigDecimal(N.Value / BigInteger.Pow(10, N.MLen)) _
Else Return New BigDecimal(N.Value / BigInteger.Pow(10, N.MLen) + 1)
End Function
Public Shared Function Truncate(ByVal N As BigDecimal, Optional ByVal P As Integer = 0) As BigDecimal
If N.MLen = 0 Then Return N
If P < 0 Then P = 0
If P >= N.MLen Then P = N.MLen
Truncate = New BigDecimal(N.Value / BigInteger.Pow(10, N.MLen - P))
Truncate.MLen += P
End Function
Public Shared Function Random(ByVal MaxSignificantDigits As UInteger) As BigDecimal
Dim N As String = ""
Dim Digits As Integer = _Rnd.Next(0, MaxSignificantDigits)
For i = 0 To Digits
N &= _Rnd.Next(0, 10)
Next
N = N.Insert(_Rnd.Next(0, N.Length), ".")
If _Rnd.Next(0, 2) = 1 Then Return New BigDecimal("-" & N) Else Return New BigDecimal(N)
End Function
Public Overrides Function ToString() As String
If Value.Sign = 0 Then Return "0"
Dim S As String = Value.ToString
If Value.Sign = -1 Then S = S.Remove(0, 1)
If S.Length > MLen Then _
If S.Length - MLen = 0 _
Then S = "#" & S.Insert(S.Length - MLen, ".") _
Else S = S.Insert(S.Length - MLen, ".") _
Else S = "#." & S.PadLeft(MLen, "0"c)
S = S.Trim("0"c)
If S.EndsWith("."c) Then S &= "0"
If Value.Sign = -1 Then Return ("-" & S).Replace("#", "0") Else Return S.Replace("#", "0")
End Function
#End Region
#Region "Misc"
Public Shared Function Sqrt(ByVal N As BigDecimal, Optional ByVal P As Integer = -1) As BigDecimal
If P < 0 Then P = _P
Dim ourGuess As BigDecimal = Div(N, Two, P)
While True
Dim average As BigDecimal = Div((ourGuess + Div(N, ourGuess, P)), Two, P)
If average = ourGuess Then Return average Else ourGuess = average
End While
Return Zero
End Function
Public Shared Function Phi(Optional ByVal P As Integer = -1) As BigDecimal
If P < 0 Then P = _P
Return (One + Sqrt(Five, P)) * ZeroPointFive
End Function
Public Shared Function Pi(Optional ByVal P As Integer = -1) As BigDecimal
If P < 0 Then P = _P
Dim answer As BigDecimal = Zero
Dim term5 As BigDecimal = ThreePointTwo
Dim term239 As BigDecimal = Div(Four, TwoHundredThirtyNine, P)
Dim term5m, term239m As BigDecimal
Dim n5 As Integer = 0
Dim n239 As Integer = 0
While True
term5m = Div(term5, New BigDecimal(n5 * 2 + 1), P)
If n5 Mod 2 = 0 Then answer += term5m Else answer -= term5m
term5 = Div(term5, TwentyFive, P)
n5 += 1
If term5m.IsZero Then Exit While
End While
While True
term239m = Div(term239, New BigDecimal(n239 * 2 + 1), P)
If n239 Mod 2 = 0 Then answer -= term239m Else answer += term239m
term239 = Div(term239, FiftySevenThousandOneHundredTwentyOne, P)
n239 += 1
If term239m.IsZero Then Exit While
End While
Return answer
End Function
Public Shared Function Tau(Optional ByVal P As Integer = -1) As BigDecimal
If P < 0 Then P = _P + 1 Else P += 1
Dim answer As BigDecimal = Zero
Dim term5 As BigDecimal = ThreePointTwo
Dim term239 As BigDecimal = Div(Four, TwoHundredThirtyNine, P)
Dim term5m, term239m As BigDecimal
Dim n5 As Integer = 0
Dim n239 As Integer = 0
While True
term5m = Div(term5, New BigDecimal(n5 * 2 + 1), P)
If n5 Mod 2 = 0 Then answer += term5m Else answer -= term5m
term5 = Div(term5, TwentyFive, P)
n5 += 1
If term5m.IsZero Then Exit While
End While
While True
term239m = Div(term239, New BigDecimal(n239 * 2 + 1), P)
If n239 Mod 2 = 0 Then answer -= term239m Else answer += term239m
term239 = Div(term239, FiftySevenThousandOneHundredTwentyOne, P)
n239 += 1
If term239m.IsZero Then Exit While
End While
Return Div(answer * Two, 1, P - 1)
End Function
Public Shared Function PythagorasConst(Optional ByVal P As Integer = -1) As BigDecimal
If P < 0 Then P = _P
Return Sqrt(Two, P)
End Function
#End Region
End Structure