document.write('
Data hosted with ♥ by Pastebin.com - Download Raw - See Original
  1. Imports System.Numerics
  2.  
  3. Public Structure BigDecimal
  4.     Private Shared _Rnd As New Random
  5.     Private Value As BigInteger
  6.     Private MLen As Integer
  7.     Private Shared _P As Integer = 64
  8.     Public Shared ReadOnly NegativeOne As New BigDecimal(-1)
  9.     Public Shared ReadOnly Zero As New BigDecimal(0)
  10.     Public Shared ReadOnly ZeroPointFive As New BigDecimal(0.5)
  11.     Public Shared ReadOnly One As New BigDecimal(1)
  12.     Public Shared ReadOnly Two As New BigDecimal(2)
  13.     Public Shared ReadOnly ThreePointTwo As New BigDecimal(3.2)
  14.     Public Shared ReadOnly Four As New BigDecimal(4)
  15.     Public Shared ReadOnly Five As New BigDecimal(5)
  16.     Public Shared ReadOnly TwentyFive As New BigDecimal(25)
  17.     Public Shared ReadOnly TwoHundredThirtyNine As New BigDecimal(239)
  18.     Public Shared ReadOnly FiftySevenThousandOneHundredTwentyOne As New BigDecimal(57121)
  19.  
  20. #Region "Properties"
  21.     Public Shared Property GlobalAccuracy() As Integer
  22.         Get
  23.             Return _P
  24.         End Get
  25.         Set(value As Integer)
  26.             _P = value
  27.         End Set
  28.     End Property
  29.     Public ReadOnly Property MantissaLength() As Integer
  30.         Get
  31.             Return MLen
  32.         End Get
  33.     End Property
  34.     Public ReadOnly Property IsOne() As Boolean
  35.         Get
  36.             If MLen = 0 Then Return Value.IsOne Else Return False
  37.         End Get
  38.     End Property
  39.     Public ReadOnly Property IsZero() As Boolean
  40.         Get
  41.             Return Value.IsZero
  42.         End Get
  43.     End Property
  44.     Public ReadOnly Property Sign() As Integer
  45.         Get
  46.             Return Value.Sign
  47.         End Get
  48.     End Property
  49.     Public ReadOnly Property IsPowerOfTwo() As Boolean
  50.         Get
  51.             If MLen = 0 AndAlso Value.IsPowerOfTwo Then Return True Else Return False
  52.         End Get
  53.     End Property
  54.     Public ReadOnly Property IsEven As Boolean
  55.         Get
  56.             If MLen = 0 AndAlso Value.IsEven Then Return True Else Return False
  57.         End Get
  58.     End Property
  59. #End Region
  60.  
  61. #Region "Constructors"
  62.     Public Sub New(ByVal N As String)
  63.         If N.StartsWith("#") Then N = N.Remove(0, 1) Else N = FormatString(N)
  64.         Dim Dec As Integer = N.IndexOf(".")
  65.         If Dec > -1 Then MLen = N.Length - (Dec + 1) Else MLen = 0
  66.         Value = BigInteger.Parse(N.Replace(".", ""))
  67.     End Sub
  68.     Public Sub New(ByVal N As Decimal, Optional ByVal M As Integer = 0)
  69.         Dim Str As String = N
  70.         Dim Dec As Integer = Str.IndexOf(".")
  71.         If Dec > -1 Then MLen = Str.Length - (Dec + 1) Else MLen = M
  72.         Value = BigInteger.Parse(N.ToString.Replace("."c, ""))
  73.     End Sub
  74.     Public Sub New(ByVal N As Single, Optional ByVal M As Integer = 0)
  75.         Dim Str As String = N
  76.         Dim Dec As Integer = Str.IndexOf(".")
  77.         If Dec > -1 Then MLen = Str.Length - (Dec + 1) Else MLen = M
  78.         Value = BigInteger.Parse(N.ToString.Replace("."c, ""))
  79.     End Sub
  80.     Public Sub New(ByVal N As Double, Optional ByVal M As Integer = 0)
  81.         Dim Str As String = N
  82.         Dim Dec As Integer = Str.IndexOf(".")
  83.         If Dec > -1 Then MLen = Str.Length - (Dec + 1) Else MLen = M
  84.         Value = BigInteger.Parse(N.ToString.Replace("."c, ""))
  85.     End Sub
  86.     Public Sub New(ByVal N() As Byte)
  87.         MLen = BitConverter.ToInt32({N(0), N(1), N(2), N(3)}, 0)
  88.         Dim VBytes(N.Length - 5) As Byte
  89.         Array.Copy(N, 4, VBytes, 0, VBytes.Length)
  90.         Value = New BigInteger(VBytes)
  91.     End Sub
  92.     Public Sub New(ByVal N As BigInteger, Optional ByVal M As Integer = 0)
  93.         Value = N
  94.         MLen = M
  95.     End Sub
  96.     Public Sub New(ByVal N As Integer, Optional ByVal M As Integer = 0)
  97.         Value = New BigInteger(N)
  98.         MLen = M
  99.     End Sub
  100.     Public Sub New(ByVal N As Long, Optional ByVal M As Integer = 0)
  101.         Value = New BigInteger(N)
  102.         MLen = M
  103.     End Sub
  104.     Public Sub New(ByVal N As UInteger, Optional ByVal M As Integer = 0)
  105.         Value = New BigInteger(N)
  106.         MLen = M
  107.     End Sub
  108.     Public Sub New(ByVal N As ULong, Optional ByVal M As Integer = 0)
  109.         Value = New BigInteger(N)
  110.         MLen = M
  111.     End Sub
  112.     Public Sub New(ByVal N As Short, Optional ByVal M As Integer = 0)
  113.         Value = New BigInteger(N)
  114.         MLen = M
  115.     End Sub
  116.     Public Sub New(ByVal N As UShort, Optional ByVal M As Integer = 0)
  117.         Value = New BigInteger(N)
  118.         MLen = M
  119.     End Sub
  120.     Public Sub New(ByVal N As Byte, Optional ByVal M As Integer = 0)
  121.         Value = New BigInteger(N)
  122.         MLen = M
  123.     End Sub
  124.     Public Sub New(ByVal N As SByte, Optional ByVal M As Integer = 0)
  125.         Value = New BigInteger(N)
  126.         MLen = M
  127.     End Sub
  128. #End Region
  129.  
  130. #Region "Convert"
  131.     Public Shared Widening Operator CType(ByVal N As BigDecimal) As Byte()
  132.         Return N.ToByteArray
  133.     End Operator
  134.     Public Shared Widening Operator CType(ByVal N() As Byte) As BigDecimal
  135.         Return New BigDecimal(N)
  136.     End Operator
  137.     Public Shared Widening Operator CType(ByVal N As BigDecimal) As String
  138.         Return N.ToString
  139.     End Operator
  140.     Public Shared Widening Operator CType(ByVal N As String) As BigDecimal
  141.         Select Case N
  142.             Case "-1"
  143.                 Return NegativeOne
  144.             Case "0"
  145.                 Return Zero
  146.             Case "0.5"
  147.                 Return ZeroPointFive
  148.             Case "1"
  149.                 Return One
  150.             Case "2"
  151.                 Return Two
  152.             Case "3.2"
  153.                 Return ThreePointTwo
  154.             Case "4"
  155.                 Return Four
  156.             Case "5"
  157.                 Return Five
  158.             Case "25"
  159.                 Return TwentyFive
  160.             Case "239"
  161.                 Return TwoHundredThirtyNine
  162.             Case "57121"
  163.                 Return FiftySevenThousandOneHundredTwentyOne
  164.             Case Else
  165.                 Return New BigDecimal(N)
  166.         End Select
  167.     End Operator
  168.     Public Shared Widening Operator CType(ByVal N As BigInteger) As BigDecimal
  169.         Select Case N
  170.             Case -1
  171.                 Return NegativeOne
  172.             Case 0
  173.                 Return Zero
  174.             Case 1
  175.                 Return One
  176.             Case 2
  177.                 Return Two
  178.             Case 4
  179.                 Return Four
  180.             Case 5
  181.                 Return Five
  182.             Case 25
  183.                 Return TwentyFive
  184.             Case 239
  185.                 Return TwoHundredThirtyNine
  186.             Case 57121
  187.                 Return FiftySevenThousandOneHundredTwentyOne
  188.             Case Else
  189.                 Return New BigDecimal(N)
  190.         End Select
  191.     End Operator
  192.     Public Shared Widening Operator CType(ByVal N As Decimal) As BigDecimal
  193.         Select Case N
  194.             Case -1
  195.                 Return NegativeOne
  196.             Case 0
  197.                 Return Zero
  198.             Case 0.5
  199.                 Return ZeroPointFive
  200.             Case 1
  201.                 Return One
  202.             Case 2
  203.                 Return Two
  204.             Case 3.2
  205.                 Return ThreePointTwo
  206.             Case 4
  207.                 Return Four
  208.             Case 5
  209.                 Return Five
  210.             Case 25
  211.                 Return TwentyFive
  212.             Case 239
  213.                 Return TwoHundredThirtyNine
  214.             Case 57121
  215.                 Return FiftySevenThousandOneHundredTwentyOne
  216.             Case Else
  217.                 Return New BigDecimal(N)
  218.         End Select
  219.     End Operator
  220.     Public Shared Widening Operator CType(ByVal N As Double) As BigDecimal
  221.         Select Case N
  222.             Case -1
  223.                 Return NegativeOne
  224.             Case 0
  225.                 Return Zero
  226.             Case 0.5
  227.                 Return ZeroPointFive
  228.             Case 1
  229.                 Return One
  230.             Case 2
  231.                 Return Two
  232.             Case 3.2
  233.                 Return ThreePointTwo
  234.             Case 4
  235.                 Return Four
  236.             Case 5
  237.                 Return Five
  238.             Case 25
  239.                 Return TwentyFive
  240.             Case 239
  241.                 Return TwoHundredThirtyNine
  242.             Case 57121
  243.                 Return FiftySevenThousandOneHundredTwentyOne
  244.             Case Else
  245.                 Return New BigDecimal(N)
  246.         End Select
  247.     End Operator
  248.     Public Shared Widening Operator CType(ByVal N As Single) As BigDecimal
  249.         Select Case N
  250.             Case -1
  251.                 Return NegativeOne
  252.             Case 0
  253.                 Return Zero
  254.             Case 0.5
  255.                 Return ZeroPointFive
  256.             Case 1
  257.                 Return One
  258.             Case 2
  259.                 Return Two
  260.             Case 3.2
  261.                 Return ThreePointTwo
  262.             Case 4
  263.                 Return Four
  264.             Case 5
  265.                 Return Five
  266.             Case 25
  267.                 Return TwentyFive
  268.             Case 239
  269.                 Return TwoHundredThirtyNine
  270.             Case 57121
  271.                 Return FiftySevenThousandOneHundredTwentyOne
  272.             Case Else
  273.                 Return New BigDecimal(N)
  274.         End Select
  275.     End Operator
  276.     Public Shared Widening Operator CType(ByVal N As Integer) As BigDecimal
  277.         Select Case N
  278.             Case -1
  279.                 Return NegativeOne
  280.             Case 0
  281.                 Return Zero
  282.             Case 1
  283.                 Return One
  284.             Case 2
  285.                 Return Two
  286.             Case 4
  287.                 Return Four
  288.             Case 5
  289.                 Return Five
  290.             Case 25
  291.                 Return TwentyFive
  292.             Case 239
  293.                 Return TwoHundredThirtyNine
  294.             Case 57121
  295.                 Return FiftySevenThousandOneHundredTwentyOne
  296.             Case Else
  297.                 Return New BigDecimal(N)
  298.         End Select
  299.     End Operator
  300.     Public Shared Widening Operator CType(ByVal N As Long) As BigDecimal
  301.         Select Case N
  302.             Case -1
  303.                 Return NegativeOne
  304.             Case 0
  305.                 Return Zero
  306.             Case 1
  307.                 Return One
  308.             Case 2
  309.                 Return Two
  310.             Case 4
  311.                 Return Four
  312.             Case 5
  313.                 Return Five
  314.             Case 25
  315.                 Return TwentyFive
  316.             Case 239
  317.                 Return TwoHundredThirtyNine
  318.             Case 57121
  319.                 Return FiftySevenThousandOneHundredTwentyOne
  320.             Case Else
  321.                 Return New BigDecimal(N)
  322.         End Select
  323.     End Operator
  324.     Public Shared Widening Operator CType(ByVal N As UInteger) As BigDecimal
  325.         Select Case N
  326.             Case 0
  327.                 Return Zero
  328.             Case 1
  329.                 Return One
  330.             Case 2
  331.                 Return Two
  332.             Case 4
  333.                 Return Four
  334.             Case 5
  335.                 Return Five
  336.             Case 25
  337.                 Return TwentyFive
  338.             Case 239
  339.                 Return TwoHundredThirtyNine
  340.             Case 57121
  341.                 Return FiftySevenThousandOneHundredTwentyOne
  342.             Case Else
  343.                 Return New BigDecimal(N)
  344.         End Select
  345.     End Operator
  346.     Public Shared Widening Operator CType(ByVal N As ULong) As BigDecimal
  347.         Select Case N
  348.             Case 0
  349.                 Return Zero
  350.             Case 1
  351.                 Return One
  352.             Case 2
  353.                 Return Two
  354.             Case 4
  355.                 Return Four
  356.             Case 5
  357.                 Return Five
  358.             Case 25
  359.                 Return TwentyFive
  360.             Case 239
  361.                 Return TwoHundredThirtyNine
  362.             Case 57121
  363.                 Return FiftySevenThousandOneHundredTwentyOne
  364.             Case Else
  365.                 Return New BigDecimal(N)
  366.         End Select
  367.     End Operator
  368.     Public Shared Widening Operator CType(ByVal N As UShort) As BigDecimal
  369.         Select Case N
  370.             Case 0
  371.                 Return Zero
  372.             Case 1
  373.                 Return One
  374.             Case 2
  375.                 Return Two
  376.             Case 4
  377.                 Return Four
  378.             Case 5
  379.                 Return Five
  380.             Case 25
  381.                 Return TwentyFive
  382.             Case 239
  383.                 Return TwoHundredThirtyNine
  384.             Case 57121
  385.                 Return FiftySevenThousandOneHundredTwentyOne
  386.             Case Else
  387.                 Return New BigDecimal(N)
  388.         End Select
  389.     End Operator
  390.     Public Shared Widening Operator CType(ByVal N As Byte) As BigDecimal
  391.         Select Case N
  392.             Case 0
  393.                 Return Zero
  394.             Case 1
  395.                 Return One
  396.             Case 2
  397.                 Return Two
  398.             Case 4
  399.                 Return Four
  400.             Case 5
  401.                 Return Five
  402.             Case 25
  403.                 Return TwentyFive
  404.             Case 239
  405.                 Return TwoHundredThirtyNine
  406.             Case Else
  407.                 Return New BigDecimal(N)
  408.         End Select
  409.     End Operator
  410.     Public Shared Widening Operator CType(ByVal N As SByte) As BigDecimal
  411.         Select Case N
  412.             Case -1
  413.                 Return NegativeOne
  414.             Case 0
  415.                 Return Zero
  416.             Case 1
  417.                 Return One
  418.             Case 2
  419.                 Return Two
  420.             Case 4
  421.                 Return Four
  422.             Case 5
  423.                 Return Five
  424.             Case 25
  425.                 Return TwentyFive
  426.             Case Else
  427.                 Return New BigDecimal(N)
  428.         End Select
  429.     End Operator
  430.     Public Shared Widening Operator CType(ByVal N As Short) As BigDecimal
  431.         Select Case N
  432.             Case -1
  433.                 Return NegativeOne
  434.             Case 0
  435.                 Return Zero
  436.             Case 1
  437.                 Return One
  438.             Case 2
  439.                 Return Two
  440.             Case 4
  441.                 Return Four
  442.             Case 5
  443.                 Return Five
  444.             Case 25
  445.                 Return TwentyFive
  446.             Case 239
  447.                 Return TwoHundredThirtyNine
  448.             Case Else
  449.                 Return New BigDecimal(N)
  450.         End Select
  451.     End Operator
  452. #End Region
  453.  
  454. #Region "+"
  455.     Public Shared Operator +(ByVal N1 As BigDecimal, ByVal N2 As BigDecimal) As BigDecimal
  456.         If N1.MLen = N2.MLen Then
  457.             Return New BigDecimal(N1.Value + N2.Value, N1.MLen)
  458.         Else
  459.             If N1.MLen > N2.MLen _
  460.                 Then Return New BigDecimal(N1.Value + N2.Value * BigInteger.Pow(10, N1.MLen - N2.MLen), N1.MLen) _
  461.                 Else Return New BigDecimal(N2.Value + N1.Value * BigInteger.Pow(10, N2.MLen - N1.MLen), N2.MLen)
  462.         End If
  463.     End Operator
  464.     Public Shared Operator +(ByVal N1 As BigDecimal, ByVal N2 As String) As BigDecimal
  465.         Return N1 + New BigDecimal(N2)
  466.     End Operator
  467.     Public Shared Operator +(ByVal N1 As String, ByVal N2 As BigDecimal) As BigDecimal
  468.         Return New BigDecimal(N1) + N2
  469.     End Operator
  470.     Public Shared Operator +(ByVal N1 As BigDecimal, ByVal N2 As BigInteger) As BigDecimal
  471.         Return N1 + New BigDecimal(N2)
  472.     End Operator
  473.     Public Shared Operator +(ByVal N1 As BigInteger, ByVal N2 As BigDecimal) As BigDecimal
  474.         Return New BigDecimal(N1) + N2
  475.     End Operator
  476.     Public Shared Operator +(ByVal N1 As BigDecimal, ByVal N2 As Decimal) As BigDecimal
  477.         Return N1 + New BigDecimal(N2)
  478.     End Operator
  479.     Public Shared Operator +(ByVal N1 As Decimal, ByVal N2 As BigDecimal) As BigDecimal
  480.         Return New BigDecimal(N1) + N2
  481.     End Operator
  482.     Public Shared Operator +(ByVal N1 As BigDecimal, ByVal N2 As Double) As BigDecimal
  483.         Return N1 + New BigDecimal(N2)
  484.     End Operator
  485.     Public Shared Operator +(ByVal N1 As Double, ByVal N2 As BigDecimal) As BigDecimal
  486.         Return New BigDecimal(N1) + N2
  487.     End Operator
  488.     Public Shared Operator +(ByVal N1 As BigDecimal, ByVal N2 As Integer) As BigDecimal
  489.         Return N1 + New BigDecimal(N2)
  490.     End Operator
  491.     Public Shared Operator +(ByVal N1 As Integer, ByVal N2 As BigDecimal) As BigDecimal
  492.         Return New BigDecimal(N1) + N2
  493.     End Operator
  494.     Public Shared Operator +(ByVal N1 As BigDecimal, ByVal N2 As Long) As BigDecimal
  495.         Return N1 + New BigDecimal(N2)
  496.     End Operator
  497.     Public Shared Operator +(ByVal N1 As Long, ByVal N2 As BigDecimal) As BigDecimal
  498.         Return New BigDecimal(N1) + N2
  499.     End Operator
  500.     Public Shared Operator +(ByVal N1 As BigDecimal, ByVal N2 As Single) As BigDecimal
  501.         Return N1 + New BigDecimal(N2)
  502.     End Operator
  503.     Public Shared Operator +(ByVal N1 As Single, ByVal N2 As BigDecimal) As BigDecimal
  504.         Return New BigDecimal(N1) + N2
  505.     End Operator
  506.     Public Shared Operator +(ByVal N1 As BigDecimal, ByVal N2 As UInteger) As BigDecimal
  507.         Return N1 + New BigDecimal(N2)
  508.     End Operator
  509.     Public Shared Operator +(ByVal N1 As UInteger, ByVal N2 As BigDecimal) As BigDecimal
  510.         Return New BigDecimal(N1) + N2
  511.     End Operator
  512.     Public Shared Operator +(ByVal N1 As BigDecimal, ByVal N2 As ULong) As BigDecimal
  513.         Return N1 + New BigDecimal(N2)
  514.     End Operator
  515.     Public Shared Operator +(ByVal N1 As ULong, ByVal N2 As BigDecimal) As BigDecimal
  516.         Return New BigDecimal(N1) + N2
  517.     End Operator
  518.     Public Shared Operator +(ByVal N1 As BigDecimal, ByVal N2 As UShort) As BigDecimal
  519.         Return N1 + New BigDecimal(N2)
  520.     End Operator
  521.     Public Shared Operator +(ByVal N1 As UShort, ByVal N2 As BigDecimal) As BigDecimal
  522.         Return New BigDecimal(N1) + N2
  523.     End Operator
  524.     Public Shared Operator +(ByVal N1 As BigDecimal, ByVal N2 As Byte) As BigDecimal
  525.         Return N1 + New BigDecimal(N2)
  526.     End Operator
  527.     Public Shared Operator +(ByVal N1 As Byte, ByVal N2 As BigDecimal) As BigDecimal
  528.         Return New BigDecimal(N1) + N2
  529.     End Operator
  530.     Public Shared Operator +(ByVal N1 As BigDecimal, ByVal N2 As SByte) As BigDecimal
  531.         Return N1 + New BigDecimal(N2)
  532.     End Operator
  533.     Public Shared Operator +(ByVal N1 As SByte, ByVal N2 As BigDecimal) As BigDecimal
  534.         Return New BigDecimal(N1) + N2
  535.     End Operator
  536.     Public Shared Operator +(ByVal N1 As BigDecimal, ByVal N2 As Short) As BigDecimal
  537.         Return N1 + New BigDecimal(N2)
  538.     End Operator
  539.     Public Shared Operator +(ByVal N1 As Short, ByVal N2 As BigDecimal) As BigDecimal
  540.         Return New BigDecimal(N1) + N2
  541.     End Operator
  542. #End Region
  543.  
  544. #Region "-"
  545.     Public Shared Operator -(ByVal N1 As BigDecimal, ByVal N2 As BigDecimal) As BigDecimal
  546.         If N1.MLen = N2.MLen Then
  547.             Return New BigDecimal(N1.Value - N2.Value, N1.MLen)
  548.         Else
  549.             If N1.MLen > N2.MLen Then
  550.                 N2.Value *= BigInteger.Pow(10, N1.MLen - N2.MLen)
  551.                 Return New BigDecimal(N1.Value - N2.Value, N1.MLen)
  552.             Else
  553.                 N1.Value *= BigInteger.Pow(10, N2.MLen - N1.MLen)
  554.                 Return New BigDecimal(N1.Value - N2.Value, N2.MLen)
  555.             End If
  556.         End If
  557.     End Operator
  558.     Public Shared Operator -(ByVal N1 As BigDecimal, ByVal N2 As String) As BigDecimal
  559.         Return N1 - New BigDecimal(N2)
  560.     End Operator
  561.     Public Shared Operator -(ByVal N1 As String, ByVal N2 As BigDecimal) As BigDecimal
  562.         Return New BigDecimal(N1) - N2
  563.     End Operator
  564.     Public Shared Operator -(ByVal N1 As BigDecimal, ByVal N2 As BigInteger) As BigDecimal
  565.         Return N1 - New BigDecimal(N2)
  566.     End Operator
  567.     Public Shared Operator -(ByVal N1 As BigInteger, ByVal N2 As BigDecimal) As BigDecimal
  568.         Return New BigDecimal(N1) - N2
  569.     End Operator
  570.     Public Shared Operator -(ByVal N1 As BigDecimal, ByVal N2 As Decimal) As BigDecimal
  571.         Return N1 - New BigDecimal(N2)
  572.     End Operator
  573.     Public Shared Operator -(ByVal N1 As Decimal, ByVal N2 As BigDecimal) As BigDecimal
  574.         Return New BigDecimal(N1) - N2
  575.     End Operator
  576.     Public Shared Operator -(ByVal N1 As BigDecimal, ByVal N2 As Double) As BigDecimal
  577.         Return N1 - New BigDecimal(N2)
  578.     End Operator
  579.     Public Shared Operator -(ByVal N1 As Double, ByVal N2 As BigDecimal) As BigDecimal
  580.         Return New BigDecimal(N1) - N2
  581.     End Operator
  582.     Public Shared Operator -(ByVal N1 As BigDecimal, ByVal N2 As Integer) As BigDecimal
  583.         Return N1 - New BigDecimal(N2)
  584.     End Operator
  585.     Public Shared Operator -(ByVal N1 As Integer, ByVal N2 As BigDecimal) As BigDecimal
  586.         Return New BigDecimal(N1) - N2
  587.     End Operator
  588.     Public Shared Operator -(ByVal N1 As BigDecimal, ByVal N2 As Long) As BigDecimal
  589.         Return N1 - New BigDecimal(N2)
  590.     End Operator
  591.     Public Shared Operator -(ByVal N1 As Long, ByVal N2 As BigDecimal) As BigDecimal
  592.         Return New BigDecimal(N1) - N2
  593.     End Operator
  594.     Public Shared Operator -(ByVal N1 As BigDecimal, ByVal N2 As Single) As BigDecimal
  595.         Return N1 - New BigDecimal(N2)
  596.     End Operator
  597.     Public Shared Operator -(ByVal N1 As Single, ByVal N2 As BigDecimal) As BigDecimal
  598.         Return New BigDecimal(N1) - N2
  599.     End Operator
  600.     Public Shared Operator -(ByVal N1 As BigDecimal, ByVal N2 As UInteger) As BigDecimal
  601.         Return N1 - New BigDecimal(N2)
  602.     End Operator
  603.     Public Shared Operator -(ByVal N1 As UInteger, ByVal N2 As BigDecimal) As BigDecimal
  604.         Return New BigDecimal(N1) - N2
  605.     End Operator
  606.     Public Shared Operator -(ByVal N1 As BigDecimal, ByVal N2 As ULong) As BigDecimal
  607.         Return N1 - New BigDecimal(N2)
  608.     End Operator
  609.     Public Shared Operator -(ByVal N1 As ULong, ByVal N2 As BigDecimal) As BigDecimal
  610.         Return New BigDecimal(N1) - N2
  611.     End Operator
  612.     Public Shared Operator -(ByVal N1 As BigDecimal, ByVal N2 As UShort) As BigDecimal
  613.         Return N1 - New BigDecimal(N2)
  614.     End Operator
  615.     Public Shared Operator -(ByVal N1 As UShort, ByVal N2 As BigDecimal) As BigDecimal
  616.         Return New BigDecimal(N1) - N2
  617.     End Operator
  618.     Public Shared Operator -(ByVal N1 As BigDecimal, ByVal N2 As Byte) As BigDecimal
  619.         Return N1 - New BigDecimal(N2)
  620.     End Operator
  621.     Public Shared Operator -(ByVal N1 As Byte, ByVal N2 As BigDecimal) As BigDecimal
  622.         Return New BigDecimal(N1) - N2
  623.     End Operator
  624.     Public Shared Operator -(ByVal N1 As BigDecimal, ByVal N2 As SByte) As BigDecimal
  625.         Return N1 - New BigDecimal(N2)
  626.     End Operator
  627.     Public Shared Operator -(ByVal N1 As SByte, ByVal N2 As BigDecimal) As BigDecimal
  628.         Return New BigDecimal(N1) - N2
  629.     End Operator
  630.     Public Shared Operator -(ByVal N1 As BigDecimal, ByVal N2 As Short) As BigDecimal
  631.         Return N1 - New BigDecimal(N2)
  632.     End Operator
  633.     Public Shared Operator -(ByVal N1 As Short, ByVal N2 As BigDecimal) As BigDecimal
  634.         Return New BigDecimal(N1) - N2
  635.     End Operator
  636. #End Region
  637.  
  638. #Region "*"
  639.     Public Shared Operator *(ByVal N1 As BigDecimal, ByVal N2 As BigDecimal) As BigDecimal
  640.         If N1.MLen = N2.MLen Then Return New BigDecimal(N1.Value * N2.Value, N1.MLen * 2)
  641.         Return New BigDecimal(N1.Value * N2.Value, N1.MLen + N2.MLen)
  642.     End Operator
  643.     Public Shared Operator *(ByVal N1 As BigDecimal, ByVal N2 As String) As BigDecimal
  644.         Return N1 * New BigDecimal(N2)
  645.     End Operator
  646.     Public Shared Operator *(ByVal N1 As String, ByVal N2 As BigDecimal) As BigDecimal
  647.         Return New BigDecimal(N1) * N2
  648.     End Operator
  649.     Public Shared Operator *(ByVal N1 As BigDecimal, ByVal N2 As BigInteger) As BigDecimal
  650.         Return N1 * New BigDecimal(N2)
  651.     End Operator
  652.     Public Shared Operator *(ByVal N1 As BigInteger, ByVal N2 As BigDecimal) As BigDecimal
  653.         Return New BigDecimal(N1) * N2
  654.     End Operator
  655.     Public Shared Operator *(ByVal N1 As BigDecimal, ByVal N2 As Decimal) As BigDecimal
  656.         Return N1 * New BigDecimal(N2)
  657.     End Operator
  658.     Public Shared Operator *(ByVal N1 As Decimal, ByVal N2 As BigDecimal) As BigDecimal
  659.         Return New BigDecimal(N1) * N2
  660.     End Operator
  661.     Public Shared Operator *(ByVal N1 As BigDecimal, ByVal N2 As Double) As BigDecimal
  662.         Return N1 * New BigDecimal(N2)
  663.     End Operator
  664.     Public Shared Operator *(ByVal N1 As Double, ByVal N2 As BigDecimal) As BigDecimal
  665.         Return New BigDecimal(N1) * N2
  666.     End Operator
  667.     Public Shared Operator *(ByVal N1 As BigDecimal, ByVal N2 As Integer) As BigDecimal
  668.         Return N1 * New BigDecimal(N2)
  669.     End Operator
  670.     Public Shared Operator *(ByVal N1 As Integer, ByVal N2 As BigDecimal) As BigDecimal
  671.         Return New BigDecimal(N1) * N2
  672.     End Operator
  673.     Public Shared Operator *(ByVal N1 As BigDecimal, ByVal N2 As Long) As BigDecimal
  674.         Return N1 * New BigDecimal(N2)
  675.     End Operator
  676.     Public Shared Operator *(ByVal N1 As Long, ByVal N2 As BigDecimal) As BigDecimal
  677.         Return New BigDecimal(N1) * N2
  678.     End Operator
  679.     Public Shared Operator *(ByVal N1 As BigDecimal, ByVal N2 As Single) As BigDecimal
  680.         Return N1 * New BigDecimal(N2)
  681.     End Operator
  682.     Public Shared Operator *(ByVal N1 As Single, ByVal N2 As BigDecimal) As BigDecimal
  683.         Return New BigDecimal(N1) * N2
  684.     End Operator
  685.     Public Shared Operator *(ByVal N1 As BigDecimal, ByVal N2 As UInteger) As BigDecimal
  686.         Return N1 * New BigDecimal(N2)
  687.     End Operator
  688.     Public Shared Operator *(ByVal N1 As UInteger, ByVal N2 As BigDecimal) As BigDecimal
  689.         Return New BigDecimal(N1) * N2
  690.     End Operator
  691.     Public Shared Operator *(ByVal N1 As BigDecimal, ByVal N2 As ULong) As BigDecimal
  692.         Return N1 * New BigDecimal(N2)
  693.     End Operator
  694.     Public Shared Operator *(ByVal N1 As ULong, ByVal N2 As BigDecimal) As BigDecimal
  695.         Return New BigDecimal(N1) * N2
  696.     End Operator
  697.     Public Shared Operator *(ByVal N1 As BigDecimal, ByVal N2 As UShort) As BigDecimal
  698.         Return N1 * New BigDecimal(N2)
  699.     End Operator
  700.     Public Shared Operator *(ByVal N1 As UShort, ByVal N2 As BigDecimal) As BigDecimal
  701.         Return New BigDecimal(N1) * N2
  702.     End Operator
  703.     Public Shared Operator *(ByVal N1 As BigDecimal, ByVal N2 As Byte) As BigDecimal
  704.         Return N1 * New BigDecimal(N2)
  705.     End Operator
  706.     Public Shared Operator *(ByVal N1 As Byte, ByVal N2 As BigDecimal) As BigDecimal
  707.         Return New BigDecimal(N1) * N2
  708.     End Operator
  709.     Public Shared Operator *(ByVal N1 As BigDecimal, ByVal N2 As SByte) As BigDecimal
  710.         Return N1 * New BigDecimal(N2)
  711.     End Operator
  712.     Public Shared Operator *(ByVal N1 As SByte, ByVal N2 As BigDecimal) As BigDecimal
  713.         Return New BigDecimal(N1) * N2
  714.     End Operator
  715.     Public Shared Operator *(ByVal N1 As BigDecimal, ByVal N2 As Short) As BigDecimal
  716.         Return N1 * New BigDecimal(N2)
  717.     End Operator
  718.     Public Shared Operator *(ByVal N1 As Short, ByVal N2 As BigDecimal) As BigDecimal
  719.         Return New BigDecimal(N1) * N2
  720.     End Operator
  721. #End Region
  722.  
  723. #Region "/"
  724.     Public Shared Function Div(ByVal N1 As BigDecimal, ByVal N2 As BigDecimal, _
  725.                                Optional ByVal P As Integer = -1) As BigDecimal
  726.         If P < 0 Then P = _P
  727.         Dim D As Integer = Math.Abs(N1.MLen - N2.MLen)
  728.         If N1.MLen >= N2.MLen Then
  729.             N1.Value *= BigInteger.Pow(10, P)
  730.             N2.Value *= BigInteger.Pow(10, D)
  731.         Else
  732.             N1.Value *= BigInteger.Pow(10, D + P)
  733.         End If
  734.         N1.Value /= N2.Value
  735.         Return New BigDecimal(N1.Value, P)
  736.     End Function
  737.     Public Shared Operator /(ByVal N1 As BigDecimal, ByVal N2 As BigDecimal) As BigDecimal
  738.         Return Div(N1, N2)
  739.     End Operator
  740.     Public Shared Operator /(ByVal N1 As BigDecimal, ByVal N2 As String) As BigDecimal
  741.         Return Div(N1, New BigDecimal(N2))
  742.     End Operator
  743.     Public Shared Operator /(ByVal N1 As String, ByVal N2 As BigDecimal) As BigDecimal
  744.         Return Div(New BigDecimal(N1), N2)
  745.     End Operator
  746.     Public Shared Operator /(ByVal N1 As BigDecimal, ByVal N2 As BigInteger) As BigDecimal
  747.         Return Div(N1, New BigDecimal(N2))
  748.     End Operator
  749.     Public Shared Operator /(ByVal N1 As BigInteger, ByVal N2 As BigDecimal) As BigDecimal
  750.         Return Div(New BigDecimal(N1), N2)
  751.     End Operator
  752.     Public Shared Operator /(ByVal N1 As BigDecimal, ByVal N2 As Decimal) As BigDecimal
  753.         Return Div(N1, New BigDecimal(N2))
  754.     End Operator
  755.     Public Shared Operator /(ByVal N1 As Decimal, ByVal N2 As BigDecimal) As BigDecimal
  756.         Return Div(New BigDecimal(N1), N2)
  757.     End Operator
  758.     Public Shared Operator /(ByVal N1 As BigDecimal, ByVal N2 As Double) As BigDecimal
  759.         Return Div(N1, New BigDecimal(N2))
  760.     End Operator
  761.     Public Shared Operator /(ByVal N1 As Double, ByVal N2 As BigDecimal) As BigDecimal
  762.         Return Div(New BigDecimal(N1), N2)
  763.     End Operator
  764.     Public Shared Operator /(ByVal N1 As BigDecimal, ByVal N2 As Integer) As BigDecimal
  765.         Return Div(N1, New BigDecimal(N2))
  766.     End Operator
  767.     Public Shared Operator /(ByVal N1 As Integer, ByVal N2 As BigDecimal) As BigDecimal
  768.         Return Div(New BigDecimal(N1), N2)
  769.     End Operator
  770.     Public Shared Operator /(ByVal N1 As BigDecimal, ByVal N2 As Long) As BigDecimal
  771.         Return Div(N1, New BigDecimal(N2))
  772.     End Operator
  773.     Public Shared Operator /(ByVal N1 As Long, ByVal N2 As BigDecimal) As BigDecimal
  774.         Return Div(New BigDecimal(N1), N2)
  775.     End Operator
  776.     Public Shared Operator /(ByVal N1 As BigDecimal, ByVal N2 As Single) As BigDecimal
  777.         Return Div(N1, New BigDecimal(N2))
  778.     End Operator
  779.     Public Shared Operator /(ByVal N1 As Single, ByVal N2 As BigDecimal) As BigDecimal
  780.         Return Div(New BigDecimal(N1), N2)
  781.     End Operator
  782.     Public Shared Operator /(ByVal N1 As BigDecimal, ByVal N2 As UInteger) As BigDecimal
  783.         Return Div(N1, New BigDecimal(N2))
  784.     End Operator
  785.     Public Shared Operator /(ByVal N1 As UInteger, ByVal N2 As BigDecimal) As BigDecimal
  786.         Return Div(New BigDecimal(N1), N2)
  787.     End Operator
  788.     Public Shared Operator /(ByVal N1 As BigDecimal, ByVal N2 As ULong) As BigDecimal
  789.         Return Div(N1, New BigDecimal(N2))
  790.     End Operator
  791.     Public Shared Operator /(ByVal N1 As ULong, ByVal N2 As BigDecimal) As BigDecimal
  792.         Return Div(New BigDecimal(N1), N2)
  793.     End Operator
  794.     Public Shared Operator /(ByVal N1 As BigDecimal, ByVal N2 As UShort) As BigDecimal
  795.         Return Div(N1, New BigDecimal(N2))
  796.     End Operator
  797.     Public Shared Operator /(ByVal N1 As UShort, ByVal N2 As BigDecimal) As BigDecimal
  798.         Return Div(New BigDecimal(N1), N2)
  799.     End Operator
  800.     Public Shared Operator /(ByVal N1 As BigDecimal, ByVal N2 As Byte) As BigDecimal
  801.         Return Div(N1, New BigDecimal(N2))
  802.     End Operator
  803.     Public Shared Operator /(ByVal N1 As Byte, ByVal N2 As BigDecimal) As BigDecimal
  804.         Return Div(New BigDecimal(N1), N2)
  805.     End Operator
  806.     Public Shared Operator /(ByVal N1 As BigDecimal, ByVal N2 As SByte) As BigDecimal
  807.         Return Div(N1, New BigDecimal(N2))
  808.     End Operator
  809.     Public Shared Operator /(ByVal N1 As SByte, ByVal N2 As BigDecimal) As BigDecimal
  810.         Return Div(New BigDecimal(N1), N2)
  811.     End Operator
  812.     Public Shared Operator /(ByVal N1 As BigDecimal, ByVal N2 As Short) As BigDecimal
  813.         Return Div(N1, New BigDecimal(N2))
  814.     End Operator
  815.     Public Shared Operator /(ByVal N1 As Short, ByVal N2 As BigDecimal) As BigDecimal
  816.         Return Div(New BigDecimal(N1), N2)
  817.     End Operator
  818. #End Region
  819.  
  820. #Region "^"
  821.     Public Shared Function Pow(ByVal N1 As BigDecimal, ByVal N2 As Integer,
  822.                                Optional ByVal P As Integer = -1) As BigDecimal
  823.         If N2 = 0 Then Return One
  824.         If P < 0 Then P = _P
  825.         If N2 < 0 Then
  826.             N2 = Math.Abs(N2)
  827.             Return Div(One, New BigDecimal(BigInteger.Pow(N1.Value, N2), N1.MLen * N2), P)
  828.         Else
  829.             Return Div(New BigDecimal(BigInteger.Pow(N1.Value, N2), N2 * N1.MLen), One, P)
  830.         End If
  831.     End Function
  832.     Public Shared Operator ^(ByVal N1 As BigDecimal, ByVal N2 As Integer) As BigDecimal
  833.         Return Pow(N1, N2)
  834.     End Operator
  835. #End Region
  836.  
  837. #Region "Mod"
  838.     Public Shared Operator Mod(ByVal N1 As BigDecimal, ByVal N2 As BigDecimal) As BigDecimal
  839.         If N2.Value.IsZero Then Throw New DivideByZeroException
  840.         If N1 = One Then Return Zero
  841.         If N1 = N2 Then Return Zero
  842.         If N1.MLen >= N2.MLen _
  843.             Then Return N1 - N2 * Floor(Div(N1, N2, N1.MLen)) _
  844.             Else Return N1 - N2 * Floor(Div(N1, N2, N2.MLen))
  845.     End Operator
  846.     Public Shared Operator Mod(ByVal N1 As BigDecimal, ByVal N2 As String) As BigDecimal
  847.         Return N1 Mod New BigDecimal(N2)
  848.     End Operator
  849.     Public Shared Operator Mod(ByVal N1 As String, ByVal N2 As BigDecimal) As BigDecimal
  850.         Return New BigDecimal(N1) Mod N2
  851.     End Operator
  852.     Public Shared Operator Mod(ByVal N1 As BigDecimal, ByVal N2 As BigInteger) As BigDecimal
  853.         Return N1 Mod New BigDecimal(N2)
  854.     End Operator
  855.     Public Shared Operator Mod(ByVal N1 As BigInteger, ByVal N2 As BigDecimal) As BigDecimal
  856.         Return New BigDecimal(N1) Mod N2
  857.     End Operator
  858.     Public Shared Operator Mod(ByVal N1 As BigDecimal, ByVal N2 As Decimal) As BigDecimal
  859.         Return N1 Mod New BigDecimal(N2)
  860.     End Operator
  861.     Public Shared Operator Mod(ByVal N1 As Decimal, ByVal N2 As BigDecimal) As BigDecimal
  862.         Return New BigDecimal(N1) Mod N2
  863.     End Operator
  864.     Public Shared Operator Mod(ByVal N1 As BigDecimal, ByVal N2 As Double) As BigDecimal
  865.         Return N1 Mod New BigDecimal(N2)
  866.     End Operator
  867.     Public Shared Operator Mod(ByVal N1 As Double, ByVal N2 As BigDecimal) As BigDecimal
  868.         Return New BigDecimal(N1) Mod N2
  869.     End Operator
  870.     Public Shared Operator Mod(ByVal N1 As BigDecimal, ByVal N2 As Integer) As BigDecimal
  871.         Return N1 Mod New BigDecimal(N2)
  872.     End Operator
  873.     Public Shared Operator Mod(ByVal N1 As Integer, ByVal N2 As BigDecimal) As BigDecimal
  874.         Return New BigDecimal(N1) Mod N2
  875.     End Operator
  876.     Public Shared Operator Mod(ByVal N1 As BigDecimal, ByVal N2 As Long) As BigDecimal
  877.         Return N1 Mod New BigDecimal(N2)
  878.     End Operator
  879.     Public Shared Operator Mod(ByVal N1 As Long, ByVal N2 As BigDecimal) As BigDecimal
  880.         Return New BigDecimal(N1) Mod N2
  881.     End Operator
  882.     Public Shared Operator Mod(ByVal N1 As BigDecimal, ByVal N2 As Single) As BigDecimal
  883.         Return N1 Mod New BigDecimal(N2)
  884.     End Operator
  885.     Public Shared Operator Mod(ByVal N1 As Single, ByVal N2 As BigDecimal) As BigDecimal
  886.         Return New BigDecimal(N1) Mod N2
  887.     End Operator
  888.     Public Shared Operator Mod(ByVal N1 As BigDecimal, ByVal N2 As UInteger) As BigDecimal
  889.         Return N1 Mod New BigDecimal(N2)
  890.     End Operator
  891.     Public Shared Operator Mod(ByVal N1 As UInteger, ByVal N2 As BigDecimal) As BigDecimal
  892.         Return New BigDecimal(N1) Mod N2
  893.     End Operator
  894.     Public Shared Operator Mod(ByVal N1 As BigDecimal, ByVal N2 As ULong) As BigDecimal
  895.         Return N1 Mod New BigDecimal(N2)
  896.     End Operator
  897.     Public Shared Operator Mod(ByVal N1 As ULong, ByVal N2 As BigDecimal) As BigDecimal
  898.         Return New BigDecimal(N1) Mod N2
  899.     End Operator
  900.     Public Shared Operator Mod(ByVal N1 As BigDecimal, ByVal N2 As UShort) As BigDecimal
  901.         Return N1 Mod New BigDecimal(N2)
  902.     End Operator
  903.     Public Shared Operator Mod(ByVal N1 As UShort, ByVal N2 As BigDecimal) As BigDecimal
  904.         Return New BigDecimal(N1) Mod N2
  905.     End Operator
  906.     Public Shared Operator Mod(ByVal N1 As BigDecimal, ByVal N2 As Byte) As BigDecimal
  907.         Return N1 Mod New BigDecimal(N2)
  908.     End Operator
  909.     Public Shared Operator Mod(ByVal N1 As Byte, ByVal N2 As BigDecimal) As BigDecimal
  910.         Return New BigDecimal(N1) Mod N2
  911.     End Operator
  912.     Public Shared Operator Mod(ByVal N1 As BigDecimal, ByVal N2 As SByte) As BigDecimal
  913.         Return N1 Mod New BigDecimal(N2)
  914.     End Operator
  915.     Public Shared Operator Mod(ByVal N1 As SByte, ByVal N2 As BigDecimal) As BigDecimal
  916.         Return New BigDecimal(N1) Mod N2
  917.     End Operator
  918.     Public Shared Operator Mod(ByVal N1 As BigDecimal, ByVal N2 As Short) As BigDecimal
  919.         Return N1 Mod New BigDecimal(N2)
  920.     End Operator
  921.     Public Shared Operator Mod(ByVal N1 As Short, ByVal N2 As BigDecimal) As BigDecimal
  922.         Return New BigDecimal(N1) Mod N2
  923.     End Operator
  924. #End Region
  925.  
  926. #Region "="
  927.     Public Shared Operator =(ByVal N1 As BigDecimal, ByVal N2 As BigDecimal) As Boolean
  928.         If N1.MLen = N2.MLen AndAlso N1.Value = N2.Value Then Return True Else Return False
  929.     End Operator
  930.     Public Shared Operator =(ByVal N1 As BigDecimal, ByVal N2 As String) As Boolean
  931.         Return N1 = New BigDecimal(N2)
  932.     End Operator
  933.     Public Shared Operator =(ByVal N1 As String, ByVal N2 As BigDecimal) As Boolean
  934.         Return New BigDecimal(N1) = N2
  935.     End Operator
  936.     Public Shared Operator =(ByVal N1 As BigDecimal, ByVal N2 As BigInteger) As Boolean
  937.         Return N1 = New BigDecimal(N2)
  938.     End Operator
  939.     Public Shared Operator =(ByVal N1 As BigInteger, ByVal N2 As BigDecimal) As Boolean
  940.         Return New BigDecimal(N1) = N2
  941.     End Operator
  942.     Public Shared Operator =(ByVal N1 As BigDecimal, ByVal N2 As Decimal) As Boolean
  943.         Return N1 = New BigDecimal(N2)
  944.     End Operator
  945.     Public Shared Operator =(ByVal N1 As Decimal, ByVal N2 As BigDecimal) As Boolean
  946.         Return New BigDecimal(N1) = N2
  947.     End Operator
  948.     Public Shared Operator =(ByVal N1 As BigDecimal, ByVal N2 As Double) As Boolean
  949.         Return N1 = New BigDecimal(N2)
  950.     End Operator
  951.     Public Shared Operator =(ByVal N1 As Double, ByVal N2 As BigDecimal) As Boolean
  952.         Return New BigDecimal(N1) = N2
  953.     End Operator
  954.     Public Shared Operator =(ByVal N1 As BigDecimal, ByVal N2 As Integer) As Boolean
  955.         Return N1 = New BigDecimal(N2)
  956.     End Operator
  957.     Public Shared Operator =(ByVal N1 As Integer, ByVal N2 As BigDecimal) As Boolean
  958.         Return New BigDecimal(N1) = N2
  959.     End Operator
  960.     Public Shared Operator =(ByVal N1 As BigDecimal, ByVal N2 As Long) As Boolean
  961.         Return N1 = New BigDecimal(N2)
  962.     End Operator
  963.     Public Shared Operator =(ByVal N1 As Long, ByVal N2 As BigDecimal) As Boolean
  964.         Return New BigDecimal(N1) = N2
  965.     End Operator
  966.     Public Shared Operator =(ByVal N1 As BigDecimal, ByVal N2 As Single) As Boolean
  967.         Return N1 = New BigDecimal(N2)
  968.     End Operator
  969.     Public Shared Operator =(ByVal N1 As Single, ByVal N2 As BigDecimal) As Boolean
  970.         Return New BigDecimal(N1) = N2
  971.     End Operator
  972.     Public Shared Operator =(ByVal N1 As BigDecimal, ByVal N2 As UInteger) As Boolean
  973.         Return N1 = New BigDecimal(N2)
  974.     End Operator
  975.     Public Shared Operator =(ByVal N1 As UInteger, ByVal N2 As BigDecimal) As Boolean
  976.         Return New BigDecimal(N1) = N2
  977.     End Operator
  978.     Public Shared Operator =(ByVal N1 As BigDecimal, ByVal N2 As ULong) As Boolean
  979.         Return N1 = New BigDecimal(N2)
  980.     End Operator
  981.     Public Shared Operator =(ByVal N1 As ULong, ByVal N2 As BigDecimal) As Boolean
  982.         Return New BigDecimal(N1) = N2
  983.     End Operator
  984.     Public Shared Operator =(ByVal N1 As BigDecimal, ByVal N2 As UShort) As Boolean
  985.         Return N1 = New BigDecimal(N2)
  986.     End Operator
  987.     Public Shared Operator =(ByVal N1 As UShort, ByVal N2 As BigDecimal) As Boolean
  988.         Return New BigDecimal(N1) = N2
  989.     End Operator
  990.     Public Shared Operator =(ByVal N1 As BigDecimal, ByVal N2 As Byte) As Boolean
  991.         Return N1 = New BigDecimal(N2)
  992.     End Operator
  993.     Public Shared Operator =(ByVal N1 As Byte, ByVal N2 As BigDecimal) As Boolean
  994.         Return New BigDecimal(N1) = N2
  995.     End Operator
  996.     Public Shared Operator =(ByVal N1 As BigDecimal, ByVal N2 As SByte) As Boolean
  997.         Return N1 = New BigDecimal(N2)
  998.     End Operator
  999.     Public Shared Operator =(ByVal N1 As SByte, ByVal N2 As BigDecimal) As Boolean
  1000.         Return New BigDecimal(N1) = N2
  1001.     End Operator
  1002.     Public Shared Operator =(ByVal N1 As BigDecimal, ByVal N2 As Short) As Boolean
  1003.         Return N1 = New BigDecimal(N2)
  1004.     End Operator
  1005.     Public Shared Operator =(ByVal N1 As Short, ByVal N2 As BigDecimal) As Boolean
  1006.         Return New BigDecimal(N1) = N2
  1007.     End Operator
  1008. #End Region
  1009.  
  1010. #Region "<>"
  1011.     Public Shared Operator <>(ByVal N1 As BigDecimal, ByVal N2 As BigDecimal) As Boolean
  1012.         If N1.MLen <> N2.MLen OrElse N1.Value <> N2.Value Then Return True Else Return False
  1013.     End Operator
  1014.     Public Shared Operator <>(ByVal N1 As BigDecimal, ByVal N2 As String) As Boolean
  1015.         Return N1 <> New BigDecimal(N2)
  1016.     End Operator
  1017.     Public Shared Operator <>(ByVal N1 As String, ByVal N2 As BigDecimal) As Boolean
  1018.         Return New BigDecimal(N1) <> N2
  1019.     End Operator
  1020.     Public Shared Operator <>(ByVal N1 As BigDecimal, ByVal N2 As BigInteger) As Boolean
  1021.         Return N1 <> New BigDecimal(N2)
  1022.     End Operator
  1023.     Public Shared Operator <>(ByVal N1 As BigInteger, ByVal N2 As BigDecimal) As Boolean
  1024.         Return New BigDecimal(N1) <> N2
  1025.     End Operator
  1026.     Public Shared Operator <>(ByVal N1 As BigDecimal, ByVal N2 As Decimal) As Boolean
  1027.         Return N1 <> New BigDecimal(N2)
  1028.     End Operator
  1029.     Public Shared Operator <>(ByVal N1 As Decimal, ByVal N2 As BigDecimal) As Boolean
  1030.         Return New BigDecimal(N1) <> N2
  1031.     End Operator
  1032.     Public Shared Operator <>(ByVal N1 As BigDecimal, ByVal N2 As Double) As Boolean
  1033.         Return N1 <> New BigDecimal(N2)
  1034.     End Operator
  1035.     Public Shared Operator <>(ByVal N1 As Double, ByVal N2 As BigDecimal) As Boolean
  1036.         Return New BigDecimal(N1) <> N2
  1037.     End Operator
  1038.     Public Shared Operator <>(ByVal N1 As BigDecimal, ByVal N2 As Integer) As Boolean
  1039.         Return N1 <> New BigDecimal(N2)
  1040.     End Operator
  1041.     Public Shared Operator <>(ByVal N1 As Integer, ByVal N2 As BigDecimal) As Boolean
  1042.         Return New BigDecimal(N1) <> N2
  1043.     End Operator
  1044.     Public Shared Operator <>(ByVal N1 As BigDecimal, ByVal N2 As Long) As Boolean
  1045.         Return N1 <> New BigDecimal(N2)
  1046.     End Operator
  1047.     Public Shared Operator <>(ByVal N1 As Long, ByVal N2 As BigDecimal) As Boolean
  1048.         Return New BigDecimal(N1) <> N2
  1049.     End Operator
  1050.     Public Shared Operator <>(ByVal N1 As BigDecimal, ByVal N2 As Single) As Boolean
  1051.         Return N1 <> New BigDecimal(N2)
  1052.     End Operator
  1053.     Public Shared Operator <>(ByVal N1 As Single, ByVal N2 As BigDecimal) As Boolean
  1054.         Return New BigDecimal(N1) <> N2
  1055.     End Operator
  1056.     Public Shared Operator <>(ByVal N1 As BigDecimal, ByVal N2 As UInteger) As Boolean
  1057.         Return N1 <> New BigDecimal(N2)
  1058.     End Operator
  1059.     Public Shared Operator <>(ByVal N1 As UInteger, ByVal N2 As BigDecimal) As Boolean
  1060.         Return New BigDecimal(N1) <> N2
  1061.     End Operator
  1062.     Public Shared Operator <>(ByVal N1 As BigDecimal, ByVal N2 As ULong) As Boolean
  1063.         Return N1 <> New BigDecimal(N2)
  1064.     End Operator
  1065.     Public Shared Operator <>(ByVal N1 As ULong, ByVal N2 As BigDecimal) As Boolean
  1066.         Return New BigDecimal(N1) <> N2
  1067.     End Operator
  1068.     Public Shared Operator <>(ByVal N1 As BigDecimal, ByVal N2 As UShort) As Boolean
  1069.         Return N1 <> New BigDecimal(N2)
  1070.     End Operator
  1071.     Public Shared Operator <>(ByVal N1 As UShort, ByVal N2 As BigDecimal) As Boolean
  1072.         Return New BigDecimal(N1) <> N2
  1073.     End Operator
  1074.     Public Shared Operator <>(ByVal N1 As BigDecimal, ByVal N2 As Byte) As Boolean
  1075.         Return N1 <> New BigDecimal(N2)
  1076.     End Operator
  1077.     Public Shared Operator <>(ByVal N1 As Byte, ByVal N2 As BigDecimal) As Boolean
  1078.         Return New BigDecimal(N1) <> N2
  1079.     End Operator
  1080.     Public Shared Operator <>(ByVal N1 As BigDecimal, ByVal N2 As SByte) As Boolean
  1081.         Return N1 <> New BigDecimal(N2)
  1082.     End Operator
  1083.     Public Shared Operator <>(ByVal N1 As SByte, ByVal N2 As BigDecimal) As Boolean
  1084.         Return New BigDecimal(N1) <> N2
  1085.     End Operator
  1086.     Public Shared Operator <>(ByVal N1 As BigDecimal, ByVal N2 As Short) As Boolean
  1087.         Return N1 <> New BigDecimal(N2)
  1088.     End Operator
  1089.     Public Shared Operator <>(ByVal N1 As Short, ByVal N2 As BigDecimal) As Boolean
  1090.         Return New BigDecimal(N1) <> N2
  1091.     End Operator
  1092. #End Region
  1093.  
  1094. #Region ">"
  1095.     Public Shared Operator >(ByVal N1 As BigDecimal, ByVal N2 As BigDecimal) As Boolean
  1096.         If Compare(N1, N2) = 1 Then Return True
  1097.         Return False
  1098.     End Operator
  1099.     Public Shared Operator >(ByVal N1 As BigDecimal, ByVal N2 As String) As Boolean
  1100.         If Compare(N1, N2) = 1 Then Return True
  1101.         Return False
  1102.     End Operator
  1103.     Public Shared Operator >(ByVal N1 As String, ByVal N2 As BigDecimal) As Boolean
  1104.         If Compare(N1, N2) = 1 Then Return True
  1105.         Return False
  1106.     End Operator
  1107.     Public Shared Operator >(ByVal N1 As BigDecimal, ByVal N2 As BigInteger) As Boolean
  1108.         If Compare(N1, N2) = 1 Then Return True
  1109.         Return False
  1110.     End Operator
  1111.     Public Shared Operator >(ByVal N1 As BigInteger, ByVal N2 As BigDecimal) As Boolean
  1112.         If Compare(N1, N2) = 1 Then Return True
  1113.         Return False
  1114.     End Operator
  1115.     Public Shared Operator >(ByVal N1 As BigDecimal, ByVal N2 As Decimal) As Boolean
  1116.         If Compare(N1, N2) = 1 Then Return True
  1117.         Return False
  1118.     End Operator
  1119.     Public Shared Operator >(ByVal N1 As Decimal, ByVal N2 As BigDecimal) As Boolean
  1120.         If Compare(N1, N2) = 1 Then Return True
  1121.         Return False
  1122.     End Operator
  1123.     Public Shared Operator >(ByVal N1 As BigDecimal, ByVal N2 As Double) As Boolean
  1124.         If Compare(N1, N2) = 1 Then Return True
  1125.         Return False
  1126.     End Operator
  1127.     Public Shared Operator >(ByVal N1 As Double, ByVal N2 As BigDecimal) As Boolean
  1128.         If Compare(N1, N2) = 1 Then Return True
  1129.         Return False
  1130.     End Operator
  1131.     Public Shared Operator >(ByVal N1 As BigDecimal, ByVal N2 As Integer) As Boolean
  1132.         If Compare(N1, N2) = 1 Then Return True
  1133.         Return False
  1134.     End Operator
  1135.     Public Shared Operator >(ByVal N1 As Integer, ByVal N2 As BigDecimal) As Boolean
  1136.         If Compare(N1, N2) = 1 Then Return True
  1137.         Return False
  1138.     End Operator
  1139.     Public Shared Operator >(ByVal N1 As BigDecimal, ByVal N2 As Long) As Boolean
  1140.         If Compare(N1, N2) = 1 Then Return True
  1141.         Return False
  1142.     End Operator
  1143.     Public Shared Operator >(ByVal N1 As Long, ByVal N2 As BigDecimal) As Boolean
  1144.         If Compare(N1, N2) = 1 Then Return True
  1145.         Return False
  1146.     End Operator
  1147.     Public Shared Operator >(ByVal N1 As BigDecimal, ByVal N2 As Single) As Boolean
  1148.         If Compare(N1, N2) = 1 Then Return True
  1149.         Return False
  1150.     End Operator
  1151.     Public Shared Operator >(ByVal N1 As Single, ByVal N2 As BigDecimal) As Boolean
  1152.         If Compare(N1, N2) = 1 Then Return True
  1153.         Return False
  1154.     End Operator
  1155.     Public Shared Operator >(ByVal N1 As BigDecimal, ByVal N2 As UInteger) As Boolean
  1156.         If Compare(N1, N2) = 1 Then Return True
  1157.         Return False
  1158.     End Operator
  1159.     Public Shared Operator >(ByVal N1 As UInteger, ByVal N2 As BigDecimal) As Boolean
  1160.         If Compare(N1, N2) = 1 Then Return True
  1161.         Return False
  1162.     End Operator
  1163.     Public Shared Operator >(ByVal N1 As BigDecimal, ByVal N2 As ULong) As Boolean
  1164.         If Compare(N1, N2) = 1 Then Return True
  1165.         Return False
  1166.     End Operator
  1167.     Public Shared Operator >(ByVal N1 As ULong, ByVal N2 As BigDecimal) As Boolean
  1168.         If Compare(N1, N2) = 1 Then Return True
  1169.         Return False
  1170.     End Operator
  1171.     Public Shared Operator >(ByVal N1 As BigDecimal, ByVal N2 As UShort) As Boolean
  1172.         If Compare(N1, N2) = 1 Then Return True
  1173.         Return False
  1174.     End Operator
  1175.     Public Shared Operator >(ByVal N1 As UShort, ByVal N2 As BigDecimal) As Boolean
  1176.         If Compare(N1, N2) = 1 Then Return True
  1177.         Return False
  1178.     End Operator
  1179.     Public Shared Operator >(ByVal N1 As BigDecimal, ByVal N2 As Byte) As Boolean
  1180.         If Compare(N1, N2) = 1 Then Return True
  1181.         Return False
  1182.     End Operator
  1183.     Public Shared Operator >(ByVal N1 As Byte, ByVal N2 As BigDecimal) As Boolean
  1184.         If Compare(N1, N2) = 1 Then Return True
  1185.         Return False
  1186.     End Operator
  1187.     Public Shared Operator >(ByVal N1 As BigDecimal, ByVal N2 As SByte) As Boolean
  1188.         If Compare(N1, N2) = 1 Then Return True
  1189.         Return False
  1190.     End Operator
  1191.     Public Shared Operator >(ByVal N1 As SByte, ByVal N2 As BigDecimal) As Boolean
  1192.         If Compare(N1, N2) = 1 Then Return True
  1193.         Return False
  1194.     End Operator
  1195.     Public Shared Operator >(ByVal N1 As BigDecimal, ByVal N2 As Short) As Boolean
  1196.         If Compare(N1, N2) = 1 Then Return True
  1197.         Return False
  1198.     End Operator
  1199.     Public Shared Operator >(ByVal N1 As Short, ByVal N2 As BigDecimal) As Boolean
  1200.         If Compare(N1, N2) = 1 Then Return True
  1201.         Return False
  1202.     End Operator
  1203. #End Region
  1204.  
  1205. #Region "<"
  1206.     Public Shared Operator <(ByVal N1 As BigDecimal, ByVal N2 As BigDecimal) As Boolean
  1207.         If Compare(N1, N2) = -1 Then Return True
  1208.         Return False
  1209.     End Operator
  1210.     Public Shared Operator <(ByVal N1 As BigDecimal, ByVal N2 As String) As Boolean
  1211.         If Compare(N1, N2) = -1 Then Return True
  1212.         Return False
  1213.     End Operator
  1214.     Public Shared Operator <(ByVal N1 As String, ByVal N2 As BigDecimal) As Boolean
  1215.         If Compare(N1, N2) = -1 Then Return True
  1216.         Return False
  1217.     End Operator
  1218.     Public Shared Operator <(ByVal N1 As BigDecimal, ByVal N2 As BigInteger) As Boolean
  1219.         If Compare(N1, N2) = -1 Then Return True
  1220.         Return False
  1221.     End Operator
  1222.     Public Shared Operator <(ByVal N1 As BigInteger, ByVal N2 As BigDecimal) As Boolean
  1223.         If Compare(N1, N2) = -1 Then Return True
  1224.         Return False
  1225.     End Operator
  1226.     Public Shared Operator <(ByVal N1 As BigDecimal, ByVal N2 As Decimal) As Boolean
  1227.         If Compare(N1, N2) = -1 Then Return True
  1228.         Return False
  1229.     End Operator
  1230.     Public Shared Operator <(ByVal N1 As Decimal, ByVal N2 As BigDecimal) As Boolean
  1231.         If Compare(N1, N2) = -1 Then Return True
  1232.         Return False
  1233.     End Operator
  1234.     Public Shared Operator <(ByVal N1 As BigDecimal, ByVal N2 As Double) As Boolean
  1235.         If Compare(N1, N2) = -1 Then Return True
  1236.         Return False
  1237.     End Operator
  1238.     Public Shared Operator <(ByVal N1 As Double, ByVal N2 As BigDecimal) As Boolean
  1239.         If Compare(N1, N2) = -1 Then Return True
  1240.         Return False
  1241.     End Operator
  1242.     Public Shared Operator <(ByVal N1 As BigDecimal, ByVal N2 As Integer) As Boolean
  1243.         If Compare(N1, N2) = -1 Then Return True
  1244.         Return False
  1245.     End Operator
  1246.     Public Shared Operator <(ByVal N1 As Integer, ByVal N2 As BigDecimal) As Boolean
  1247.         If Compare(N1, N2) = -1 Then Return True
  1248.         Return False
  1249.     End Operator
  1250.     Public Shared Operator <(ByVal N1 As BigDecimal, ByVal N2 As Long) As Boolean
  1251.         If Compare(N1, N2) = -1 Then Return True
  1252.         Return False
  1253.     End Operator
  1254.     Public Shared Operator <(ByVal N1 As Long, ByVal N2 As BigDecimal) As Boolean
  1255.         If Compare(N1, N2) = -1 Then Return True
  1256.         Return False
  1257.     End Operator
  1258.     Public Shared Operator <(ByVal N1 As BigDecimal, ByVal N2 As Single) As Boolean
  1259.         If Compare(N1, N2) = -1 Then Return True
  1260.         Return False
  1261.     End Operator
  1262.     Public Shared Operator <(ByVal N1 As Single, ByVal N2 As BigDecimal) As Boolean
  1263.         If Compare(N1, N2) = -1 Then Return True
  1264.         Return False
  1265.     End Operator
  1266.     Public Shared Operator <(ByVal N1 As BigDecimal, ByVal N2 As UInteger) As Boolean
  1267.         If Compare(N1, N2) = -1 Then Return True
  1268.         Return False
  1269.     End Operator
  1270.     Public Shared Operator <(ByVal N1 As UInteger, ByVal N2 As BigDecimal) As Boolean
  1271.         If Compare(N1, N2) = -1 Then Return True
  1272.         Return False
  1273.     End Operator
  1274.     Public Shared Operator <(ByVal N1 As BigDecimal, ByVal N2 As ULong) As Boolean
  1275.         If Compare(N1, N2) = -1 Then Return True
  1276.         Return False
  1277.     End Operator
  1278.     Public Shared Operator <(ByVal N1 As ULong, ByVal N2 As BigDecimal) As Boolean
  1279.         If Compare(N1, N2) = -1 Then Return True
  1280.         Return False
  1281.     End Operator
  1282.     Public Shared Operator <(ByVal N1 As BigDecimal, ByVal N2 As UShort) As Boolean
  1283.         If Compare(N1, N2) = -1 Then Return True
  1284.         Return False
  1285.     End Operator
  1286.     Public Shared Operator <(ByVal N1 As UShort, ByVal N2 As BigDecimal) As Boolean
  1287.         If Compare(N1, N2) = -1 Then Return True
  1288.         Return False
  1289.     End Operator
  1290.     Public Shared Operator <(ByVal N1 As BigDecimal, ByVal N2 As Byte) As Boolean
  1291.         If Compare(N1, N2) = -1 Then Return True
  1292.         Return False
  1293.     End Operator
  1294.     Public Shared Operator <(ByVal N1 As Byte, ByVal N2 As BigDecimal) As Boolean
  1295.         If Compare(N1, N2) = -1 Then Return True
  1296.         Return False
  1297.     End Operator
  1298.     Public Shared Operator <(ByVal N1 As BigDecimal, ByVal N2 As SByte) As Boolean
  1299.         If Compare(N1, N2) = -1 Then Return True
  1300.         Return False
  1301.     End Operator
  1302.     Public Shared Operator <(ByVal N1 As SByte, ByVal N2 As BigDecimal) As Boolean
  1303.         If Compare(N1, N2) = -1 Then Return True
  1304.         Return False
  1305.     End Operator
  1306.     Public Shared Operator <(ByVal N1 As BigDecimal, ByVal N2 As Short) As Boolean
  1307.         If Compare(N1, N2) = -1 Then Return True
  1308.         Return False
  1309.     End Operator
  1310.     Public Shared Operator <(ByVal N1 As Short, ByVal N2 As BigDecimal) As Boolean
  1311.         If Compare(N1, N2) = -1 Then Return True
  1312.         Return False
  1313.     End Operator
  1314. #End Region
  1315.  
  1316. #Region ">="
  1317.     Public Shared Operator >=(ByVal N1 As BigDecimal, ByVal N2 As BigDecimal) As Boolean
  1318.         Dim R As Integer = Compare(N1, N2)
  1319.         If R = 0 OrElse R = 1 Then Return True Else Return False
  1320.     End Operator
  1321.     Public Shared Operator >=(ByVal N1 As BigDecimal, ByVal N2 As String) As Boolean
  1322.         Dim R As Integer = Compare(N1, N2)
  1323.         If R = 0 OrElse R = 1 Then Return True Else Return False
  1324.     End Operator
  1325.     Public Shared Operator >=(ByVal N1 As String, ByVal N2 As BigDecimal) As Boolean
  1326.         Dim R As Integer = Compare(N1, N2)
  1327.         If R = 0 OrElse R = 1 Then Return True Else Return False
  1328.     End Operator
  1329.     Public Shared Operator >=(ByVal N1 As BigDecimal, ByVal N2 As BigInteger) As Boolean
  1330.         Dim R As Integer = Compare(N1, N2)
  1331.         If R = 0 OrElse R = 1 Then Return True Else Return False
  1332.     End Operator
  1333.     Public Shared Operator >=(ByVal N1 As BigInteger, ByVal N2 As BigDecimal) As Boolean
  1334.         Dim R As Integer = Compare(N1, N2)
  1335.         If R = 0 OrElse R = 1 Then Return True Else Return False
  1336.     End Operator
  1337.     Public Shared Operator >=(ByVal N1 As BigDecimal, ByVal N2 As Decimal) As Boolean
  1338.         Dim R As Integer = Compare(N1, N2)
  1339.         If R = 0 OrElse R = 1 Then Return True Else Return False
  1340.     End Operator
  1341.     Public Shared Operator >=(ByVal N1 As Decimal, ByVal N2 As BigDecimal) As Boolean
  1342.         Dim R As Integer = Compare(N1, N2)
  1343.         If R = 0 OrElse R = 1 Then Return True Else Return False
  1344.     End Operator
  1345.     Public Shared Operator >=(ByVal N1 As BigDecimal, ByVal N2 As Double) As Boolean
  1346.         Dim R As Integer = Compare(N1, N2)
  1347.         If R = 0 OrElse R = 1 Then Return True Else Return False
  1348.     End Operator
  1349.     Public Shared Operator >=(ByVal N1 As Double, ByVal N2 As BigDecimal) As Boolean
  1350.         Dim R As Integer = Compare(N1, N2)
  1351.         If R = 0 OrElse R = 1 Then Return True Else Return False
  1352.     End Operator
  1353.     Public Shared Operator >=(ByVal N1 As BigDecimal, ByVal N2 As Integer) As Boolean
  1354.         Dim R As Integer = Compare(N1, N2)
  1355.         If R = 0 OrElse R = 1 Then Return True Else Return False
  1356.     End Operator
  1357.     Public Shared Operator >=(ByVal N1 As Integer, ByVal N2 As BigDecimal) As Boolean
  1358.         Dim R As Integer = Compare(N1, N2)
  1359.         If R = 0 OrElse R = 1 Then Return True Else Return False
  1360.     End Operator
  1361.     Public Shared Operator >=(ByVal N1 As BigDecimal, ByVal N2 As Long) As Boolean
  1362.         Dim R As Integer = Compare(N1, N2)
  1363.         If R = 0 OrElse R = 1 Then Return True Else Return False
  1364.     End Operator
  1365.     Public Shared Operator >=(ByVal N1 As Long, ByVal N2 As BigDecimal) As Boolean
  1366.         Dim R As Integer = Compare(N1, N2)
  1367.         If R = 0 OrElse R = 1 Then Return True Else Return False
  1368.     End Operator
  1369.     Public Shared Operator >=(ByVal N1 As BigDecimal, ByVal N2 As Single) As Boolean
  1370.         Dim R As Integer = Compare(N1, N2)
  1371.         If R = 0 OrElse R = 1 Then Return True Else Return False
  1372.     End Operator
  1373.     Public Shared Operator >=(ByVal N1 As Single, ByVal N2 As BigDecimal) As Boolean
  1374.         Dim R As Integer = Compare(N1, N2)
  1375.         If R = 0 OrElse R = 1 Then Return True Else Return False
  1376.     End Operator
  1377.     Public Shared Operator >=(ByVal N1 As BigDecimal, ByVal N2 As UInteger) As Boolean
  1378.         Dim R As Integer = Compare(N1, N2)
  1379.         If R = 0 OrElse R = 1 Then Return True Else Return False
  1380.     End Operator
  1381.     Public Shared Operator >=(ByVal N1 As UInteger, ByVal N2 As BigDecimal) As Boolean
  1382.         Dim R As Integer = Compare(N1, N2)
  1383.         If R = 0 OrElse R = 1 Then Return True Else Return False
  1384.     End Operator
  1385.     Public Shared Operator >=(ByVal N1 As BigDecimal, ByVal N2 As ULong) As Boolean
  1386.         Dim R As Integer = Compare(N1, N2)
  1387.         If R = 0 OrElse R = 1 Then Return True Else Return False
  1388.     End Operator
  1389.     Public Shared Operator >=(ByVal N1 As ULong, ByVal N2 As BigDecimal) As Boolean
  1390.         Dim R As Integer = Compare(N1, N2)
  1391.         If R = 0 OrElse R = 1 Then Return True Else Return False
  1392.     End Operator
  1393.     Public Shared Operator >=(ByVal N1 As BigDecimal, ByVal N2 As UShort) As Boolean
  1394.         Dim R As Integer = Compare(N1, N2)
  1395.         If R = 0 OrElse R = 1 Then Return True Else Return False
  1396.     End Operator
  1397.     Public Shared Operator >=(ByVal N1 As UShort, ByVal N2 As BigDecimal) As Boolean
  1398.         Dim R As Integer = Compare(N1, N2)
  1399.         If R = 0 OrElse R = 1 Then Return True Else Return False
  1400.     End Operator
  1401.     Public Shared Operator >=(ByVal N1 As BigDecimal, ByVal N2 As Byte) As Boolean
  1402.         Dim R As Integer = Compare(N1, N2)
  1403.         If R = 0 OrElse R = 1 Then Return True Else Return False
  1404.     End Operator
  1405.     Public Shared Operator >=(ByVal N1 As Byte, ByVal N2 As BigDecimal) As Boolean
  1406.         Dim R As Integer = Compare(N1, N2)
  1407.         If R = 0 OrElse R = 1 Then Return True Else Return False
  1408.     End Operator
  1409.     Public Shared Operator >=(ByVal N1 As BigDecimal, ByVal N2 As SByte) As Boolean
  1410.         Dim R As Integer = Compare(N1, N2)
  1411.         If R = 0 OrElse R = 1 Then Return True Else Return False
  1412.     End Operator
  1413.     Public Shared Operator >=(ByVal N1 As SByte, ByVal N2 As BigDecimal) As Boolean
  1414.         Dim R As Integer = Compare(N1, N2)
  1415.         If R = 0 OrElse R = 1 Then Return True Else Return False
  1416.     End Operator
  1417.     Public Shared Operator >=(ByVal N1 As BigDecimal, ByVal N2 As Short) As Boolean
  1418.         Dim R As Integer = Compare(N1, N2)
  1419.         If R = 0 OrElse R = 1 Then Return True Else Return False
  1420.     End Operator
  1421.     Public Shared Operator >=(ByVal N1 As Short, ByVal N2 As BigDecimal) As Boolean
  1422.         Dim R As Integer = Compare(N1, N2)
  1423.         If R = 0 OrElse R = 1 Then Return True Else Return False
  1424.     End Operator
  1425. #End Region
  1426.  
  1427. #Region "<="
  1428.     Public Shared Operator <=(ByVal N1 As BigDecimal, ByVal N2 As BigDecimal) As Boolean
  1429.         Dim R As Integer = Compare(N1, N2)
  1430.         If R = 0 OrElse R = -1 Then Return True Else Return False
  1431.     End Operator
  1432.     Public Shared Operator <=(ByVal N1 As BigDecimal, ByVal N2 As String) As Boolean
  1433.         Dim R As Integer = Compare(N1, N2)
  1434.         If R = 0 OrElse R = -1 Then Return True Else Return False
  1435.     End Operator
  1436.     Public Shared Operator <=(ByVal N1 As String, ByVal N2 As BigDecimal) As Boolean
  1437.         Dim R As Integer = Compare(N1, N2)
  1438.         If R = 0 OrElse R = -1 Then Return True Else Return False
  1439.     End Operator
  1440.     Public Shared Operator <=(ByVal N1 As BigDecimal, ByVal N2 As BigInteger) As Boolean
  1441.         Dim R As Integer = Compare(N1, N2)
  1442.         If R = 0 OrElse R = -1 Then Return True Else Return False
  1443.     End Operator
  1444.     Public Shared Operator <=(ByVal N1 As BigInteger, ByVal N2 As BigDecimal) As Boolean
  1445.         Dim R As Integer = Compare(N1, N2)
  1446.         If R = 0 OrElse R = -1 Then Return True Else Return False
  1447.     End Operator
  1448.     Public Shared Operator <=(ByVal N1 As BigDecimal, ByVal N2 As Decimal) As Boolean
  1449.         Dim R As Integer = Compare(N1, N2)
  1450.         If R = 0 OrElse R = -1 Then Return True Else Return False
  1451.     End Operator
  1452.     Public Shared Operator <=(ByVal N1 As Decimal, ByVal N2 As BigDecimal) As Boolean
  1453.         Dim R As Integer = Compare(N1, N2)
  1454.         If R = 0 OrElse R = -1 Then Return True Else Return False
  1455.     End Operator
  1456.     Public Shared Operator <=(ByVal N1 As BigDecimal, ByVal N2 As Double) As Boolean
  1457.         Dim R As Integer = Compare(N1, N2)
  1458.         If R = 0 OrElse R = -1 Then Return True Else Return False
  1459.     End Operator
  1460.     Public Shared Operator <=(ByVal N1 As Double, ByVal N2 As BigDecimal) As Boolean
  1461.         Dim R As Integer = Compare(N1, N2)
  1462.         If R = 0 OrElse R = -1 Then Return True Else Return False
  1463.     End Operator
  1464.     Public Shared Operator <=(ByVal N1 As BigDecimal, ByVal N2 As Integer) As Boolean
  1465.         Dim R As Integer = Compare(N1, N2)
  1466.         If R = 0 OrElse R = -1 Then Return True Else Return False
  1467.     End Operator
  1468.     Public Shared Operator <=(ByVal N1 As Integer, ByVal N2 As BigDecimal) As Boolean
  1469.         Dim R As Integer = Compare(N1, N2)
  1470.         If R = 0 OrElse R = -1 Then Return True Else Return False
  1471.     End Operator
  1472.     Public Shared Operator <=(ByVal N1 As BigDecimal, ByVal N2 As Long) As Boolean
  1473.         Dim R As Integer = Compare(N1, N2)
  1474.         If R = 0 OrElse R = -1 Then Return True Else Return False
  1475.     End Operator
  1476.     Public Shared Operator <=(ByVal N1 As Long, ByVal N2 As BigDecimal) As Boolean
  1477.         Dim R As Integer = Compare(N1, N2)
  1478.         If R = 0 OrElse R = -1 Then Return True Else Return False
  1479.     End Operator
  1480.     Public Shared Operator <=(ByVal N1 As BigDecimal, ByVal N2 As Single) As Boolean
  1481.         Dim R As Integer = Compare(N1, N2)
  1482.         If R = 0 OrElse R = -1 Then Return True Else Return False
  1483.     End Operator
  1484.     Public Shared Operator <=(ByVal N1 As Single, ByVal N2 As BigDecimal) As Boolean
  1485.         Dim R As Integer = Compare(N1, N2)
  1486.         If R = 0 OrElse R = -1 Then Return True Else Return False
  1487.     End Operator
  1488.     Public Shared Operator <=(ByVal N1 As BigDecimal, ByVal N2 As UInteger) As Boolean
  1489.         Dim R As Integer = Compare(N1, N2)
  1490.         If R = 0 OrElse R = -1 Then Return True Else Return False
  1491.     End Operator
  1492.     Public Shared Operator <=(ByVal N1 As UInteger, ByVal N2 As BigDecimal) As Boolean
  1493.         Dim R As Integer = Compare(N1, N2)
  1494.         If R = 0 OrElse R = -1 Then Return True Else Return False
  1495.     End Operator
  1496.     Public Shared Operator <=(ByVal N1 As BigDecimal, ByVal N2 As ULong) As Boolean
  1497.         Dim R As Integer = Compare(N1, N2)
  1498.         If R = 0 OrElse R = -1 Then Return True Else Return False
  1499.     End Operator
  1500.     Public Shared Operator <=(ByVal N1 As ULong, ByVal N2 As BigDecimal) As Boolean
  1501.         Dim R As Integer = Compare(N1, N2)
  1502.         If R = 0 OrElse R = -1 Then Return True Else Return False
  1503.     End Operator
  1504.     Public Shared Operator <=(ByVal N1 As BigDecimal, ByVal N2 As UShort) As Boolean
  1505.         Dim R As Integer = Compare(N1, N2)
  1506.         If R = 0 OrElse R = -1 Then Return True Else Return False
  1507.     End Operator
  1508.     Public Shared Operator <=(ByVal N1 As UShort, ByVal N2 As BigDecimal) As Boolean
  1509.         Dim R As Integer = Compare(N1, N2)
  1510.         If R = 0 OrElse R = -1 Then Return True Else Return False
  1511.     End Operator
  1512.     Public Shared Operator <=(ByVal N1 As BigDecimal, ByVal N2 As Byte) As Boolean
  1513.         Dim R As Integer = Compare(N1, N2)
  1514.         If R = 0 OrElse R = -1 Then Return True Else Return False
  1515.     End Operator
  1516.     Public Shared Operator <=(ByVal N1 As Byte, ByVal N2 As BigDecimal) As Boolean
  1517.         Dim R As Integer = Compare(N1, N2)
  1518.         If R = 0 OrElse R = -1 Then Return True Else Return False
  1519.     End Operator
  1520.     Public Shared Operator <=(ByVal N1 As BigDecimal, ByVal N2 As SByte) As Boolean
  1521.         Dim R As Integer = Compare(N1, N2)
  1522.         If R = 0 OrElse R = -1 Then Return True Else Return False
  1523.     End Operator
  1524.     Public Shared Operator <=(ByVal N1 As SByte, ByVal N2 As BigDecimal) As Boolean
  1525.         Dim R As Integer = Compare(N1, N2)
  1526.         If R = 0 OrElse R = -1 Then Return True Else Return False
  1527.     End Operator
  1528.     Public Shared Operator <=(ByVal N1 As BigDecimal, ByVal N2 As Short) As Boolean
  1529.         Dim R As Integer = Compare(N1, N2)
  1530.         If R = 0 OrElse R = -1 Then Return True Else Return False
  1531.     End Operator
  1532.     Public Shared Operator <=(ByVal N1 As Short, ByVal N2 As BigDecimal) As Boolean
  1533.         Dim R As Integer = Compare(N1, N2)
  1534.         If R = 0 OrElse R = -1 Then Return True Else Return False
  1535.     End Operator
  1536. #End Region
  1537.  
  1538. #Region "General Functions"
  1539.     Private Shared Function FormatString(ByVal N As String) As String
  1540.         If N = "" Then Return "0"
  1541.         Dim RetStr As String
  1542.         If N.StartsWith("-") Then RetStr = "-" Else RetStr = ""
  1543.         Dim Point As Boolean = True
  1544.         For Each c As Char In N
  1545.             Select Case c
  1546.                 Case "0"c To "9"c
  1547.                     RetStr &= c
  1548.                 Case "."c
  1549.                     If Point Then
  1550.                         RetStr &= "."
  1551.                         Point = False
  1552.                     End If
  1553.             End Select
  1554.         Next
  1555.         If RetStr = "" Then Return "0"
  1556.         Return RetStr
  1557.     End Function
  1558.  
  1559.     Public Function ToByteArray() As Byte()
  1560.         Dim RBytes As New List(Of Byte)
  1561.         RBytes.AddRange(BitConverter.GetBytes(MLen))
  1562.         RBytes.AddRange(Value.ToByteArray)
  1563.         Return RBytes.ToArray
  1564.     End Function
  1565.  
  1566.     Public Shared Function Compare(ByVal N1 As BigDecimal, ByVal N2 As BigDecimal) As Integer
  1567.         If N1.Sign > N2.Sign Then Return 1
  1568.         If N1.Sign < N2.Sign Then Return -1
  1569.         If N1.MLen = N2.MLen Then
  1570.             If N1.Value = N2.Value Then Return 0
  1571.             If N1.Value < N2.Value Then Return -1
  1572.             If N1.Value > N2.Value Then Return 1
  1573.         End If
  1574.         If N1.MLen > N2.MLen _
  1575.         Then N2.Value *= BigInteger.Pow(10, N1.MLen) _
  1576.         Else N1.Value *= BigInteger.Pow(10, N2.MLen)
  1577.         If N1.Value < N2.Value Then Return -1 Else Return 1
  1578.     End Function
  1579.     Public Shared Function Compare(ByVal N1 As BigDecimal, ByVal N2 As String) As Integer
  1580.         Return Compare(N1, New BigDecimal(N2))
  1581.     End Function
  1582.     Public Shared Function Compare(ByVal N1 As String, ByVal N2 As BigDecimal) As Integer
  1583.         Return Compare(New BigDecimal(N1), N2)
  1584.     End Function
  1585.     Public Shared Function Compare(ByVal N1 As BigDecimal, ByVal N2 As BigInteger) As Integer
  1586.         Return Compare(N1, New BigDecimal(N2))
  1587.     End Function
  1588.     Public Shared Function Compare(ByVal N1 As BigInteger, ByVal N2 As BigDecimal) As Integer
  1589.         Return Compare(New BigDecimal(N1), N2)
  1590.     End Function
  1591.     Public Shared Function Compare(ByVal N1 As BigDecimal, ByVal N2 As Decimal) As Integer
  1592.         Return Compare(N1, New BigDecimal(N2))
  1593.     End Function
  1594.     Public Shared Function Compare(ByVal N1 As Decimal, ByVal N2 As BigDecimal) As Integer
  1595.         Return Compare(New BigDecimal(N1), N2)
  1596.     End Function
  1597.     Public Shared Function Compare(ByVal N1 As BigDecimal, ByVal N2 As Double) As Integer
  1598.         Return Compare(N1, New BigDecimal(N2))
  1599.     End Function
  1600.     Public Shared Function Compare(ByVal N1 As Double, ByVal N2 As BigDecimal) As Integer
  1601.         Return Compare(New BigDecimal(N1), N2)
  1602.     End Function
  1603.     Public Shared Function Compare(ByVal N1 As BigDecimal, ByVal N2 As Integer) As Integer
  1604.         Return Compare(N1, New BigDecimal(N2))
  1605.     End Function
  1606.     Public Shared Function Compare(ByVal N1 As Integer, ByVal N2 As BigDecimal) As Integer
  1607.         Return Compare(New BigDecimal(N1), N2)
  1608.     End Function
  1609.     Public Shared Function Compare(ByVal N1 As BigDecimal, ByVal N2 As Long) As Integer
  1610.         Return Compare(N1, New BigDecimal(N2))
  1611.     End Function
  1612.     Public Shared Function Compare(ByVal N1 As Long, ByVal N2 As BigDecimal) As Integer
  1613.         Return Compare(New BigDecimal(N1), N2)
  1614.     End Function
  1615.     Public Shared Function Compare(ByVal N1 As BigDecimal, ByVal N2 As Single) As Integer
  1616.         Return Compare(N1, New BigDecimal(N2))
  1617.     End Function
  1618.     Public Shared Function Compare(ByVal N1 As Single, ByVal N2 As BigDecimal) As Integer
  1619.         Return Compare(New BigDecimal(N1), N2)
  1620.     End Function
  1621.     Public Shared Function Compare(ByVal N1 As BigDecimal, ByVal N2 As UInteger) As Integer
  1622.         Return Compare(N1, New BigDecimal(N2))
  1623.     End Function
  1624.     Public Shared Function Compare(ByVal N1 As UInteger, ByVal N2 As BigDecimal) As Integer
  1625.         Return Compare(New BigDecimal(N1), N2)
  1626.     End Function
  1627.     Public Shared Function Compare(ByVal N1 As BigDecimal, ByVal N2 As ULong) As Integer
  1628.         Return Compare(N1, New BigDecimal(N2))
  1629.     End Function
  1630.     Public Shared Function Compare(ByVal N1 As ULong, ByVal N2 As BigDecimal) As Integer
  1631.         Return Compare(New BigDecimal(N1), N2)
  1632.     End Function
  1633.     Public Shared Function Compare(ByVal N1 As BigDecimal, ByVal N2 As Short) As Integer
  1634.         Return Compare(N1, New BigDecimal(N2))
  1635.     End Function
  1636.     Public Shared Function Compare(ByVal N1 As Short, ByVal N2 As BigDecimal) As Integer
  1637.         Return Compare(New BigDecimal(N1), N2)
  1638.     End Function
  1639.     Public Shared Function Compare(ByVal N1 As BigDecimal, ByVal N2 As UShort) As Integer
  1640.         Return Compare(N1, New BigDecimal(N2))
  1641.     End Function
  1642.     Public Shared Function Compare(ByVal N1 As UShort, ByVal N2 As BigDecimal) As Integer
  1643.         Return Compare(New BigDecimal(N1), N2)
  1644.     End Function
  1645.     Public Shared Function Compare(ByVal N1 As BigDecimal, ByVal N2 As Byte) As Integer
  1646.         Return Compare(N1, New BigDecimal(N2))
  1647.     End Function
  1648.     Public Shared Function Compare(ByVal N1 As Byte, ByVal N2 As BigDecimal) As Integer
  1649.         Return Compare(New BigDecimal(N1), N2)
  1650.     End Function
  1651.     Public Shared Function Compare(ByVal N1 As BigDecimal, ByVal N2 As SByte) As Integer
  1652.         Return Compare(N1, New BigDecimal(N2))
  1653.     End Function
  1654.     Public Shared Function Compare(ByVal N1 As SByte, ByVal N2 As BigDecimal) As Integer
  1655.         Return Compare(New BigDecimal(N1), N2)
  1656.     End Function
  1657.  
  1658.     Public Function CompareTo(ByVal N2 As BigDecimal) As Integer
  1659.         Return Compare(Me, N2)
  1660.     End Function
  1661.     Public Function CompareTo(ByVal N2 As String) As Integer
  1662.         Return Compare(Me, N2)
  1663.     End Function
  1664.     Public Function CompareTo(ByVal N2 As BigInteger) As Integer
  1665.         Return Compare(Me, N2)
  1666.     End Function
  1667.     Public Function CompareTo(ByVal N2 As Decimal) As Integer
  1668.         Return Compare(Me, N2)
  1669.     End Function
  1670.     Public Function CompareTo(ByVal N2 As Double) As Integer
  1671.         Return Compare(Me, N2)
  1672.     End Function
  1673.     Public Function CompareTo(ByVal N2 As Integer) As Integer
  1674.         Return Compare(Me, N2)
  1675.     End Function
  1676.     Public Function CompareTo(ByVal N2 As Long) As Integer
  1677.         Return Compare(Me, N2)
  1678.     End Function
  1679.     Public Function CompareTo(ByVal N2 As Single) As Integer
  1680.         Return Compare(Me, N2)
  1681.     End Function
  1682.     Public Function CompareTo(ByVal N2 As UInteger) As Integer
  1683.         Return Compare(Me, N2)
  1684.     End Function
  1685.     Public Function CompareTo(ByVal N2 As ULong) As Integer
  1686.         Return Compare(Me, N2)
  1687.     End Function
  1688.     Public Function CompareTo(ByVal N2 As Short) As Integer
  1689.         Return Compare(Me, N2)
  1690.     End Function
  1691.     Public Function CompareTo(ByVal N2 As UShort) As Integer
  1692.         Return Compare(Me, N2)
  1693.     End Function
  1694.     Public Function CompareTo(ByVal N2 As Byte) As Integer
  1695.         Return Compare(Me, N2)
  1696.     End Function
  1697.     Public Function CompareTo(ByVal N2 As SByte) As Integer
  1698.         Return Compare(Me, N2)
  1699.     End Function
  1700.  
  1701.     Public Shared Function Abs(ByVal N As BigDecimal) As BigDecimal
  1702.         If N.Sign = -1 Then Return N * N.Sign
  1703.         Return N
  1704.     End Function
  1705.  
  1706.     Public Shared Function Floor(ByVal N As BigDecimal) As BigDecimal
  1707.         If N.Sign = -1 _
  1708.             Then Return New BigDecimal(N.Value / BigInteger.Pow(10, N.MLen) - 1) _
  1709.             Else Return New BigDecimal(N.Value / BigInteger.Pow(10, N.MLen))
  1710.     End Function
  1711.  
  1712.     Public Shared Function Ceiling(ByVal N As BigDecimal) As BigDecimal
  1713.         If N.Sign = -1 _
  1714.             Then Return New BigDecimal(N.Value / BigInteger.Pow(10, N.MLen)) _
  1715.             Else Return New BigDecimal(N.Value / BigInteger.Pow(10, N.MLen) + 1)
  1716.     End Function
  1717.  
  1718.     Public Shared Function Truncate(ByVal N As BigDecimal, Optional ByVal P As Integer = 0) As BigDecimal
  1719.         If N.MLen = 0 Then Return N
  1720.         If P < 0 Then P = 0
  1721.         If P >= N.MLen Then P = N.MLen
  1722.         Truncate = New BigDecimal(N.Value / BigInteger.Pow(10, N.MLen - P))
  1723.         Truncate.MLen += P
  1724.     End Function
  1725.  
  1726.     Public Shared Function Random(ByVal MaxSignificantDigits As UInteger) As BigDecimal
  1727.         Dim N As String = ""
  1728.         Dim Digits As Integer = _Rnd.Next(0, MaxSignificantDigits)
  1729.         For i = 0 To Digits
  1730.             N &= _Rnd.Next(0, 10)
  1731.         Next
  1732.         N = N.Insert(_Rnd.Next(0, N.Length), ".")
  1733.         If _Rnd.Next(0, 2) = 1 Then Return New BigDecimal("-" & N) Else Return New BigDecimal(N)
  1734.     End Function
  1735.  
  1736.     Public Overrides Function ToString() As String
  1737.         If Value.Sign = 0 Then Return "0"
  1738.         Dim S As String = Value.ToString
  1739.         If Value.Sign = -1 Then S = S.Remove(0, 1)
  1740.         If S.Length > MLen Then _
  1741.             If S.Length - MLen = 0 _
  1742.             Then S = "#" & S.Insert(S.Length - MLen, ".") _
  1743.             Else S = S.Insert(S.Length - MLen, ".") _
  1744.         Else S = "#." & S.PadLeft(MLen, "0"c)
  1745.         S = S.Trim("0"c)
  1746.         If S.EndsWith("."c) Then S &= "0"
  1747.         If Value.Sign = -1 Then Return ("-" & S).Replace("#", "0") Else Return S.Replace("#", "0")
  1748.     End Function
  1749. #End Region
  1750.  
  1751. #Region "Misc"
  1752.     Public Shared Function Sqrt(ByVal N As BigDecimal, Optional ByVal P As Integer = -1) As BigDecimal
  1753.         If P < 0 Then P = _P
  1754.         Dim ourGuess As BigDecimal = Div(N, Two, P)
  1755.         While True
  1756.             Dim average As BigDecimal = Div((ourGuess + Div(N, ourGuess, P)), Two, P)
  1757.             If average = ourGuess Then Return average Else ourGuess = average
  1758.         End While
  1759.         Return Zero
  1760.     End Function
  1761.  
  1762.     Public Shared Function Phi(Optional ByVal P As Integer = -1) As BigDecimal
  1763.         If P < 0 Then P = _P
  1764.         Return (One + Sqrt(Five, P)) * ZeroPointFive
  1765.     End Function
  1766.  
  1767.     Public Shared Function Pi(Optional ByVal P As Integer = -1) As BigDecimal
  1768.         If P < 0 Then P = _P
  1769.         Dim answer As BigDecimal = Zero
  1770.         Dim term5 As BigDecimal = ThreePointTwo
  1771.         Dim term239 As BigDecimal = Div(Four, TwoHundredThirtyNine, P)
  1772.         Dim term5m, term239m As BigDecimal
  1773.         Dim n5 As Integer = 0
  1774.         Dim n239 As Integer = 0
  1775.         While True
  1776.             term5m = Div(term5, New BigDecimal(n5 * 2 + 1), P)
  1777.             If n5 Mod 2 = 0 Then answer += term5m Else answer -= term5m
  1778.             term5 = Div(term5, TwentyFive, P)
  1779.             n5 += 1
  1780.             If term5m.IsZero Then Exit While
  1781.         End While
  1782.         While True
  1783.             term239m = Div(term239, New BigDecimal(n239 * 2 + 1), P)
  1784.             If n239 Mod 2 = 0 Then answer -= term239m Else answer += term239m
  1785.             term239 = Div(term239, FiftySevenThousandOneHundredTwentyOne, P)
  1786.             n239 += 1
  1787.             If term239m.IsZero Then Exit While
  1788.         End While
  1789.         Return answer
  1790.     End Function
  1791.  
  1792.     Public Shared Function Tau(Optional ByVal P As Integer = -1) As BigDecimal
  1793.         If P < 0 Then P = _P + 1 Else P += 1
  1794.         Dim answer As BigDecimal = Zero
  1795.         Dim term5 As BigDecimal = ThreePointTwo
  1796.         Dim term239 As BigDecimal = Div(Four, TwoHundredThirtyNine, P)
  1797.         Dim term5m, term239m As BigDecimal
  1798.         Dim n5 As Integer = 0
  1799.         Dim n239 As Integer = 0
  1800.         While True
  1801.             term5m = Div(term5, New BigDecimal(n5 * 2 + 1), P)
  1802.             If n5 Mod 2 = 0 Then answer += term5m Else answer -= term5m
  1803.             term5 = Div(term5, TwentyFive, P)
  1804.             n5 += 1
  1805.             If term5m.IsZero Then Exit While
  1806.         End While
  1807.         While True
  1808.             term239m = Div(term239, New BigDecimal(n239 * 2 + 1), P)
  1809.             If n239 Mod 2 = 0 Then answer -= term239m Else answer += term239m
  1810.             term239 = Div(term239, FiftySevenThousandOneHundredTwentyOne, P)
  1811.             n239 += 1
  1812.             If term239m.IsZero Then Exit While
  1813.         End While
  1814.         Return Div(answer * Two, 1, P - 1)
  1815.     End Function
  1816.  
  1817.     Public Shared Function PythagorasConst(Optional ByVal P As Integer = -1) As BigDecimal
  1818.         If P < 0 Then P = _P
  1819.         Return Sqrt(Two, P)
  1820.     End Function
  1821. #End Region
  1822. End Structure
');