------------

2004-06-28 Published C# Version 3.1.1640.27496 of XICalc in XICalc31a.zip
2004-06-28 Published C# Version 3.1.1640.23916 of XPCalc in XPCalc31a.zip

------------

Fixed problem with displaying a number with only 2 super-digits before and
after the radix point in a baseO != 10.

2004-06-30 Published C# Version 3.1.1642.13110 of XPCalc in XPCalc31b.zip

------------

Removed diag output of normal multiply from MulSlowSI and MulSlowF.

Added a move to bottom of text box in WriteO.

Changed outB.Text += st; to outB.AppendText(st); in WriteO to prevent
jerky output to text box.

Mad a version of ValueSI called ValueSI10 that streamlines the case when
baseI = 10.

Computing Pi to 262044 decimal digits was getting the last 198 digits
incorrect. Fixed this by changing QuRtIv, SqRtIvF, and SqRootF in file
MultiPi.cs.

Changed all statements like ++i to i++. I looked at the disassembly and both
Were doing something like "inc dword ptr [ebp-40h]".
Did not change the ones in FHTMult.cs coded by Joerg Arndt.

Replaced the SqRootF function in MultiID.cs with the one in MultiPi.cs that
came from my CPP program.

Modified formatted output of a decimal number to a file to have exponents
with commas like BB = m.n E+36893,48814,74191,03227, m.n =
in XPCalLst.FormatN.

Fixed XPCalLst.LnLN, had a problem with large + exponents going negative.
CosH, ACosH, SinH, ASinH also had problems with very large exponents.

Base other than 10 had problems displaying numbers with large exponents.
Fixed in XPCalLst.WriteFB.

Fixed Calc.ReadFNmB for baseI file input.

Fixed XPCalLst.WriteFB for baseO file output of negative numbers.

2004-07-05 Published C# Version 3.1.1647.15513 of XPCalc in XPCalc31c.zip

------------

Added public static void FHTConvolution0(ref double[] g, int ldn)
to FHTMult to do a Convolution of g with g to speedup x^2 and Sq(x)
also added XIMult.XISquare and changed XIMult.XIMul for this.  Saved 20%.

Converted the use of several functions like Swap, Swap0, ... to inline code
in FHTMult.cs to speed up FHT convolutions. Saves 22% of run time.

2004-07-06 Published C# Version 3.1.1648.19895 of XPCalc in XPCalc31d.zip

------------

Changed the structure of multiple precision from an array of type float to
an array of type int (int32). Now using Math.BigMul to multiply two int32s
to get an int64 and Math.DivRem to get quotient and remainder in one step.

Changed the output of the number of digits in a number like the [36] in

X = 8.63464,79732,04794,56723,82544,63962,5443E-1 (35) [36]

to be more accurate like:

X = 8.63464,79732,04794,56723,82544,63962,5443E-1 (35) [35]

Now the leading zeros in the first super digit and the trailing zeros in the
last super digit are not counted.

Fixed an error in Calc.RRanN that did not show up until the 9th RN when
muDMax = 4.

In XICalc, fixed problem in Sig function. For example Sig(100) gave an error.

2004-07-11 Published C# Version 3.1.1653.19105 of XICalc in XICalc31b.zip
2004-07-11 Published C# Version 3.1.1653.19292 of XPCalc in XPCalc31e.zip

------------

Added feature to both XICalc and XPCalc, Pri(x), to set the execution
priority in the operating system. Also added it to the Config Form.

Deleted the PiAaR, PiAbR, PiGLR procedures and the generation of restart
files for PiAa, PiAb, PiGL.

Added the function PiAGM to compute pi by the AGM algorithm.

2004-07-15 Published C# Version 3.1.1657.16344 of XICalc in XICalc31c.zip
2004-07-15 Published C# Version 3.1.1657.16570 of XPCalc in XPCalc31f.zip

------------

Converted XICalc and XPCalc to object oriented programming. The Named number,
Floating number, Signed Integer, and Unsigned Integer are 4 classes MultiN,
MultiF, MultiSI, and MultiUI that inherit one from the other.

Changed the number of guard super-digits from 2 to 4 when running in
expanded mode.

Can compute Pi with PiAGM with Max digits set to 16,773,024 in 77 minutes.
16,773,032 gives out of memory alarms. On Intel 3 GHz Pentium 4.

2004-07-22 Published C# Version 3.1.1664.20313 of XICalc in XICalc31d.zip
2004-07-22 Published C# Version 3.1.1664.20297 of XPCalc in XPCalc31g.zip

------------

Added Environment.NewLine = \n or \r\n to terminate lines to text files.
My generated text files now have \r\n vice \n when compiled in Windows.

Changed the call to MultiID_Init to the call:

    new MultiID(); // initialize class MultiID

Same for other classes.

Added a find text capability to HelpForm. Also added PlaySound from
winmm.dll and Beep from kernel32.dll system file. Sounds are NotFound.wav
and Wrap.wav. The Beep is 277Hz = middle C# and 554Hz one octave above.

2004-07-27 Published C# Version 3.1.1669.16694 of XICalc in XICalc31e.zip
2004-07-27 Published C# Version 3.1.1669.16731 of XPCalc in XPCalc31h.zip

------------

Repackaged zip file and renamed some files to the liking of Joerg Arndt.

2004-08-17 Published C# Version 3.1.1669.16694 of XICalc in XICalc31f.zip
2004-08-17 Published C# Version 3.1.1669.16731 of XPCalc in XPCalc31i.zip

------------

Added function key display to Run form. Added debug mode to diag as diag(-1).
Added Prime factor algorithm using the Elliptic Curve Method and prime testing
and searching using the Adleman function from UBASIC.

2004-08-22 Published C# Version 3.1.1695.19254 of XICalc in XICalc31g.zip
2004-08-22 Published C# Version 3.1.1695.27076 of XPCalc in XPCalc31j.zip

Sent XICalc and XPCalc to Simtel.

------------

Changed MultiSI operator ^ to process x^2 more efficiently.
Changed Len(MultiSI z) to save savedBits[] for Bit(n) function
Fixed a problem in HelpForm Print Preview. You can now print from there.
Added an Acrobat PDF file converted from my Word file by docuPrinter from
http://www.neevia.com/ .
Fixed "When **Running**..." message starting in the middle of a line of output.

int mpLen = Len(mp);
for (ii = 1; ii < mpLen; ii++)		// time consuming loop so did it the
long way
// this shows an attempt at speedup, but only gained about 8% and a lot harder
to read
// still about 11 times longer running time than UBASIC
{
    MultiID.MulSI(w3, w3, w1);		// bo = w1 | w3 * w3 % z;
    MultiID.ModPosSI(w1, z, w1);
    ...

Fixed Sig, Sig0, Tau, Phi, and AllD commands to use the new Elliptic Curve
Method to factor.

Removed the leading space before some lines of output in PrimeFA.cs and the
diag display of large primes.

Fixed an overflow problem in ECM by increasing pWords by 2 in several places:
	int pWords = 2 * z.N + 2;

Fixed a problem with a learn line ending with ;
problem was there from the beginning, but not in VPCalc.

Added a Time procedure to the calculator language. Also added a way to set the
Time or Debug mode on the Config form.

Removed most of the goto's from PrimeFA.cs.

Moved some common code out of Calc.cs to Common.cs and Global.cs

2004-09-17 Published C# Version 3.1.1721.11293 of XICalc in XICalc31h.zip
2004-09-17 Published C# Version 3.1.1721.11359 of XPCalc in XPCalc31k.zip

------------

Fixed/disabled the sounds/beeper in the input text box on the run form when
the PgUp key is used to retrieve previous commands "e.Handled = true;"

Fixed a problem on the Help form when Key F is typed without the Ctrl key.
Added documentation for the Ctrl-F key on the Help Form.

Added a Gamma function to XPCalc. Only good to less than 16 decimal digits.

Founder an error in PFB(x) i.e. PFB(111) -> 3^1 * 37^1 * 37^1 ... 9 times.
Fixed it in Calc.cs if (MultiID.muAbort || done) break; // exit for
The done test was missing.

2004-11-01 Published C# Version 3.1.1766.14469 of XICalc in XICalc31i.zip
2004-11-01 Published C# Version 3.1.1765.30903 of XPCalc in XPCalc31l.zip

------------

To the integer version, XICalc, I added Bernoulli numbers.

To the floating-point version, XPCalc I added:

1) Bernoulli numbers B(n) for integer n >= 0
2) The gamma function gamma(x) = (x-1)! for real x
3) The digamma function psi(x) for real x
4) The Dirichlet beta function beta(x) for real x
5) The Dirichlet eta function eta(x) for real x
6) The Dirichlet lambda function lambda(x) for real x
7) The Riemann zeta function zeta(x) for real x
8) The computation of Euler's constant =
0.57721566490153286060651209008240243104...

2004-12-08 Published C# Version 3.1.1803.14518 of XICalc in XICalc31j.zip
2004-12-08 Published C# Version 3.1.1803.14530 of XPCalc in XPCalc31m.zip

------------

To the integer version, XICalc, I added:

1) Bino(X' Y) = Binomial coefficient (X, Y)
2) Fib(X) = FibonacciNumber(X), Fib(0) = 0
3) LCM(X' Y) = Least common multiple X, Y
4) Kron(X' Y) = Kronecker-Legendre symbol X over Y
5) Mu(X) = Moebius mu(X) function
6) IsSq(X) = 1 (True) if X is a square, else 0
7) SqFree(X) = 1 if X is a squarefree, else 0

To the floating-point version, XPCalc I added:

1) BetaC(X' Y) = The complete beta function
2) Bino(X' Y) = Binomial coefficient (X, Y), generalized
3) Erf(X) = Error function
4) ErfC(X) = Complementary error function
5) Fib(X) = FibonacciNumber(X), Fib(0) = 0
6) GamL(X' Y) = Lower incomplete gamma function
7) GamP(X' Y) = lower regularized incomplete gamma function
8) GamQ(X' Y) = Upper regularized incomplete gamma function
9) GamU(X' Y) = Upper incomplete gamma function
10) LCM(X' Y) =  Least common multiple X, Y
11) Cat => Returns Catalan's constant G = 0.915965594177...
12) ee  => Returns e = Exp(1) = 2.718281828459045...
13) EulerC => Euler's constant gamma = -psi(1) = .5772156649...
14) Ln10 => Returns the natural log of 10 = 2.30258509...
15) Pi => Same as the P command, Returns Pi = 3.141592653...
16) Ubiq => Returns the ubiquitous constant U = 0.84721308479...
17) MeanC(X' Y) = Common mean of X and Y
18) Dilog(X) = Dilogarithm(X)
19) Polylog(S' X) = Polylogarithm(S, X)
20) Lerch(X' S' A) = LerchPhi(X, S, A)
21) E1(X) = Exponential integral function one

2005-01-13 Published C# Version 3.2.1839.17057 of XICalc in XICalc32a.zip
2005-01-13 Published C# Version 3.2.1839.17099 of XPCalc in XPCalc32a.zip

------------

To the integer version, XICalc, I added:

1) Factoring 111111! gave "Error, factors do not check". Added the alarm:
"Error, cannot store more than 2000 prime factors" to PFA(X) and PFE(X).

2) Primo(X) = Primorial function, product of all primes <= X
3) # => Primorial (like factorial)
4) PrimR(X) = Smallest and largest primitive root of X or zero
5) PrimRP(X) = Smallest and largest prime primitive root of X or zero
6) Modified toggle Log file not to log status if in Quite mode
7) Added # to delimiters
8) added: MultiID.muErr = false; // because no value is returned to nList[nI]
   to AllD(X), GenBern(X), GenEuler(X), PFA(X), PFB(X), PFE(X), and PTab(X).
9) Mord(A' N) = Multiplicative order of base A (mod N) or 0
10) Sord(A' N) = Multiplicative suborder of base A (mod N) or 0

To the floating-point version, XPCalc I added:

1) A = X -- Y  =>  Set A to X * Repunit(Y), 3--5 = 33333, five threes
2) Modified toggle Log file not to log status if in Quite mode
3) added: MultiID.muErr = false; // because no value is returned to nList[nI]
   to GenBern(X) and GenEuler(X).

2005-02-09 Published C# Version 3.2.1866.18497 of XICalc in XICalc32b.zip
2005-02-09 Published C# Version 3.2.1866.14306 of XPCalc in XPCalc32b.zip

------------

To the integer version, XICalc, I added:

1) CuRt(X) = CubeRoot(X), Re = Remainder
2) added // as an indicator of start of comment
3) PhiL(X' A) = Legendre's formula
4) PiL(X) = number of primes <= X by Lehmer's formula
5) PiL1(X) = number of primes <= X by Legendre's formula
6) PiM(X) = number of primes <= X by Meissel's formula
7) modified Pi(X) to optimally use sieve or PiL(X)
   Pi(X) = Number of primes <= X by sieve or Lehmer
8) changed the PiI(X) function to P(X)
9) added delta time to second order status messages


To the floating-point version, XPCalc I added:

1) CuRt(X) = CubeRoot(X) = X^(1/3)
2) added // as an indicator of start of comment
3) Ei(X) = Exponential integral Ei(x) = -E1(-x)
4) Li(X) = Logarithmic integral = Ei(Ln(X))
5) Fixed GamU(0' x) = E1(X) for all X != 0.
6) Ceiling(X) = Least integer >= X
7) Floor(X) = Greatest integer <= X
8) Round(X) = Integer nearest to X
9) Ri(X) = Riemann prime counting function
10) added delta time to second order status messages

2005-03-05 Published C# Version 3.2.1890.26050 of XICalc in XICalc32c.zip
2005-03-05 Published C# Version 3.2.1890.23978 of XPCalc in XPCalc32c.zip

------------

To the integer version, XICalc, I added:

1) Improved PrimR(X) to work with bigger numbers
2) PrimRQ(X' Y) = 1 (True) if X is a primitive root of Y, else 0
3) HelpH(X) => Set height of Help Form in pixels
4) HelpW(X) => Set width of Help Form in pixels
5) RunH(X) => Set height of Run Form in pixels
6) RunW(X) => Set width of Run Form in pixels
7) changed the RN(X) function to put RN on the list
8) GCDe(X' Y) = Extended GCD(X, Y) = X*X1 + Y*Y1
9) Inv(X' Y) = Z = Inverse of X Mod Y, X*Z = 1 Mod Y
10) Chin(X' Y) = add to Chinese remainder problem z = X mod Y
11) Chin1(X' Y) = Initialize Chinese remainder with X1, Y1
12) Solve(X' Y' N) = Solve for z, X * z = Y Mod N
13) Changed divisions so remainder Re >= 0
14) Changed cube root so remainder Re >= 0
15) Modified syntax to allow commas in argument input


To the floating-point version, XPCalc I added:

1) added more delta time info to status messages
2) HelpH(X) => Set height of Help Form in pixels
3) HelpW(X) => Set width of Help Form in pixels
4) RunH(X) => Set height of Run Form in pixels
5) RunW(X) => Set width of Run Form in pixels
6) changed the RN(X) function to put RN on the list
7) Lerch(X' S' A) = LerchPhi(X, S, A), preferred method
8) Lerch1(X' S' A) = 16-digit LerchPhi(X, S, A)
9) Lerch2(X' S' A) = LerchPhi(X, S, A) by simple sum
10) LerchT(X' S' A) = LerchPhiT(X, S, A), traditional
11) LerchT1(X' S' A) = 16-digit LerchPhiT(X, S, A)
12) LerchT2(X' S' A) = LerchPhiT(X, S, A) by simple sum
13) ZetaH(S' A) = Hurwitz zeta function
14) Modified syntax to allow commas in argument input

2005-04-29 Published C# Version 3.2.1945.19717 of XICalc in XICalc32d.zip
2005-04-29 Published C# Version 3.2.1945.20371 of XPCalc in XPCalc32d.zip

------------

To the integer version, XICalc, I added:

1) added priority Pri(x) to saved configuration file
2) added program version and system info to Clear Log File and Clear Output
Screen:
    XICalc - Extra Precision Integer Calculator, C# Version 3.2.1987.30724
    Run on: Harry's Intel 3 GHz Pentium 4 - Dell DGV4T641 - Windows XP Pro SP2
3) Allowed larger number to be processed, 67,109,200 decimal digits
4) Allowed larger numbers to be processes by FHT multiply, 2^26 decimal digits
5) Added GC.Collect(); // force garbage collection in Fast Hartley Transform
Multiply


To the floating-point version, XPCalc I added:

1) added priority Pri(x) to saved configuration file
2) added program version and system info to Clear Log File and Clear Output
Screen:
    XPCalc - Extra Precision Calculator, C# Version 3.2.1987.20663
    Run on: Harry's Intel 3 GHz Pentium 4 - Dell DGV4T641 - Windows XP Pro SP2
3) Allowed larger number to be processed, 67,109,200 decimal digits
4) Allowed larger numbers to be processes by FHT multiply, 2^26 decimal digits
5) Added GC.Collect(); // force garbage collection in Fast Hartley Transform
Multiply
6) Can now compute Pi by PiAGM upto 54,525,945 decimal digits
7) Changed syntax of constants functions Cat, Ee, EulerC, Ln10, Pi, and Ubiq

2005-06-16 Published C# Version 3.2.1992.30632 of XICalc in XICalc32e.zip
2005-06-16 Published C# Version 3.2.1992.30648 of XPCalc in XPCalc32e.zip

------------

To the integer version, XICalc, I added:

1) updates 00Note.txt, Common.cs, and MultiID.cs to be the same as the
    XCCalc versions
2) updated cs.ico file to have 16x16, 32x32, and 48x48 icons
3) in Common.cs, added a side effect to "bool ZTestN(int zI)" to prevent -0
4) to Common.cs, added "int saveI // number of items on the list never to
    be deleted 1 or 2", 1 for XICalc and XPCalc (X), 2 for XCCalc (i and X).
5) in MultiID.cs, changed z.S = !z.S; to ChSSI(z); to prevent -0, in 6 places
6) in MultiID.cs, changed "SetToSIS(MultiSI x, MultiSI z) // z = x
    // copy everything but .Nm name" to... , but don't make it smaller
7) added Sign(X) function to calculator
8) added find capability to the Restore Input History form, like on the Help
form
9) added HistH(X) and HistW(X) procedures
10) added functions:
      MEq(X) = Mersenne equation = 2^X - 1
      MPP(X) = Mersenne Prime Power, MPP(1) = 2
      PEq(X) = Perfect equation = (2^X - 1) * 2^(X-1)


To the floating-point version, XPCalc I added:

1) updates 00Note.txt, Common.cs, MultiID.cs, MultiFD.cs, and XPCalLst.cs
    to be the same as the XCCalc versions
2) updated cs.ico file to have 16x16, 32x32, and 48x48 icons
3) in Common.cs, added a side effect to "bool ZTestN(int zI)" to prevent -0
4) to Common.cs, added "int saveI // number of items on the list never to
    be deleted 1 or 2", 1 for XICalc and XPCalc (X), 2 for XCCalc (i and X).
5) in MultiID.cs, changed z.S = !z.S; to ChSSI(z); to prevent -0, in 6 places
6) in MultiID.cs, changed "SetToSIS(MultiSI x, MultiSI z) // z = x
    // copy everything but .Nm name" to... , but don't make it smaller
7) in Calc.cs, changed the CalWriteN procedure to be compatible with XCCalc
8) in MultiFD.cs, changed z.S = !z.S; to ChSSI(z); to prevent -0, in 6 places
9) in MultiFD.cs, added "SignF(MultiF z) // sign(z) = -1 if z < 0, 0 if z = 0,
    +1 if z > 0" and changed "CompFF(MultiF x, MultiF z)" to use it.
10) in MultiFD.cs, added test of MultiID.writeBool in WriteF(RichTextBox, 2
places
11) in MultiFD.cs, added a side effect to "bool ZTestF(MultiF z)" to prevent -0
in XPCalLst.cs
12) added Common.saveI = 1; to XPCalLst() initialization
13) cs, added procedure ExpandMore(int more)
14) added procedure bool FMBIok(int zI, out int fMBI) used by procedures PowMN,
     RFacMBN, ModFMBN
15) changed procedures FormatNB and FormatN
16) changed error message "Cannot compute LerchPhi for x > 1" to
     "Cannot compute LerchPhi(x, s, a) for x > 1"
17) changed *.S = !*.S; to MultiFD.ChSF(*); in 18 places
18) added missing MultiFD.DoneF(limM); MultiFD.DoneF(lim);
19) added XPCalLst.ExpandMore(MultiFD.fGuard); to void BetaN(MultiF x, int zI)
20) added if (fMBI == zI) return; to SetFMBN
21) fixed a problem in ModN where the answer was coming out equal to N
22) removed error messages "Cannot take GamP(a, x) if a is zero and x <= zero"
     and "Cannot take GamP(a, x) if a is an integer < zero"
     and "Cannot take GamP(a, x) if x <= 0.0"
     from GamPN and added "Cannot take GamP(a, 0) if a is an integer < zero"
23) removed error messages "Cannot take GamQ(a, x) if a is an integer < zero"
     and "Cannot take GamQ(a, x) if x <= 0.0"
     from GamQN and added "Cannot take GamQ(a, 0) if a is an integer < zero"
24) removed error messages "Cannot take GamL(a, x) if a is an integer <= zero"
     and "Cannot take GamL(a, x) if x <= 0.0"
     from GamLN and added "Cannot take GamL(a, x) if x < 0.0"
25) fixed GamUN so GamU(a, 0) = Gam(a)
26) changed MuWriteErr("GamLS: x <= 0") to MuWriteErr("GamLS: x = 0")
     in GamLS
27) removed MuWriteErr("GamLS: x <= 0"); from GamLS
28) removed MultiID.MuWriteErr("GamLS: x <= 0"); from GamLS
29) added function Sign(X) to calculator
30) added function AGM(X, Y) = Arithmetic Geometric Mean = MeanC(X, Y)
31) added find capability to the Restore Input History form, like on the Help
form
32) added HistH(X) and HistW(X) procedures


To the floating-point Complex version, XCCalc I added:

1) This is the first version released.

2006-01-03 Published C# Version 3.2.2194.20584 of XICalc in XICalc32f.zip & .exe
2006-01-03 Published C# Version 3.2.2194.20607 of XPCalc in XPCalc32f.zip & .exe
2006-01-03 Published C# Version 3.2.2194.20646 of XCCalc in XCCalc32f.zip & .exe

------------

To all three versions of the program:

1) Changed the definition of integer divide so that all modulo and division
operations are performed to make the remainder of the division to have the same
sign as the divisor or be zero. For q = x/y with remainder r (y != 0), 0 <= |r|
< |y| and sign(r) = sign(y) or r = 0, and x = q*y + r.
2) Added the Min(X, Y) and Max(X, Y) functions.
3) Changed so a command starting with "st[0] >= '0' && st[0] <= '9' &&
st[0] <= MaxDigit" or "(", "-", "+", or "=" will be prepended with "Top.Nm="
(no == though), where Top.Nm is the name of the item on top of the number list.
Done for each command of a multi-command command line.

To the integer version, XICalc, I added:

1) A = X # Y  =>  Set A to Mag(X, Y) = SqRt(Sq(X) + Sq(Y)) and set Re
2) DivInt(X, Y) = Floor(X/Y), integer divide
2) DivRem(X, Y) = Floor(X/Y) and set Re to remainder
3) Mag(X, Y) = SqRt(Sq(X), Sq(Y)), Re = Remainder


To the XPCalc and XCCalc I added:

1) Changed the infix operator \ to integer divide x\y = Floor(x/y)
2) Added DivInt(X, Y) and DivRem(X, Y) functions
3) Added ACot(X), ACsc(X), ASec(X), Cot(X), Csc(X), Sec(X) functions
4) Added ACotH(X), ACscH(X), ASecH(X), CotH(X), CscH(X), SecH(X) functions


To the floating-point version, XPCalc I added:

1) Nothing unique to XPCalc


To the floating-point Complex version, XCCalc I added:

1) Fixed the Erf(X) and ErfC(X) functions to work correctly for complex
arguments.
2) Changed the % infix operator to store both real and imaginary parts in FMB

2006-02-07 Published C# Version 3.2.2229.13527 of XICalc in XICalc32g.zip & .exe
2006-02-07 Published C# Version 3.2.2229.13570 of XPCalc in XPCalc32g.zip & .exe
2006-02-07 Published C# Version 3.2.2229.13606 of XCCalc in XCCalc32g.zip & .exe

------------

To all three versions of the program:

1) Allow == as well as = in "if a == b then ..."
2) Added "Overtype On"/"Overtype Off" status to the Run Form
3) Added file name to title on the Run Form when running a code file
4) Added assignment operators +=, -=, *=, /=, and %= like c, c++ and c#
5) Fixed am obscure error with +{newline}+{F8}.
6) fixed problem on startup form having "Max Commands in History" initially
displaying 1000 in regular font instead of bold.


To the integer version, XICalc, I added:

1) Added the special case of LCM(0, 0) = 0 instead of divide error.
2) Added EulerN(x) = Euler(x)
3) Added Gam(x) = Fac(x-1)


To the XPCalc and XCCalc I added:

1) Fixed a problem with RN(-1/3) having more than 35 digits
2) Added primitive op code ". => Write x in fixed point decimal"
3) Added constants Phi = (1+SqRt(5))/2 and PhiP = (1-SqRt(5))/2
these are the two solutions of the equation x^2 - x - 1 = 0.
Phi is the Golden Ratio. PhiP stands for Phi prime.


To the floating-point version, XPCalc I added:

1) Nothing unique to XPCalc


To the floating-point Complex version, XCCalc I added:

1) Fixed a problem in Li(i) and Ei(I/3) by adding a new constructor for class
MultiC  public MultiC(int nMaxIr, int nMaxIi)
2) Fixed a problem reading in complex numbers from a .XCN file
3) Fixed a problem with Rn(i/3) giving a complex random number

2006-03-16 Published C# Version 3.2.2264.38003 of XICalc in XICalc32h.zip & .exe
2006-03-16 Published C# Version 3.2.2264.38036 of XPCalc in XPCalc32h.zip & .exe
2006-03-16 Published C# Version 3.2.2264.38069 of XCCalc in XCCalc32h.zip & .exe

------------

To all three versions of the program:

1) Added an "On Top" check box to the Help menu list.
2) Added the Ran procedure to randomly start a new random number sequence based
on time.
3) Added RInt(X, Y) = RandomInteger between Int(X.r) and Int(Y.r) inclusive.


To the integer version, XICalc, I added:

1) Added the binary splitting method of computing factorials.
2) Changed the F and ! primitive and the Bino(X, Y), Fac(X), FacM(X), and Gam(X)
functions to use the binary splitting method to speed up factorials.
3) Added BinoS(X, Y), FacMS(X) and FacS(X) functions to compute factorials the
old slow way.
4) Added function Fac2(X, Y) = Fac(X) / Fac(Y) by binary splitting.
5) Added function FacM2(X, Y) = Fac(X) / Fac(Y) Mod FMB by binary splitting.
6) Added function SumDD(X) = Sum of decimal digits in X.
7) Added function SumD(X, Y) = Sum of base Y digits in X, Y >= 2.
8) Added function MPG(X) = The X'th Mersenne Prime Generator, MPG(1) = 3.
9) Added function PNG(X) = The X'th Perfect Number Generator, PNG(1) = 6.
10) Added function MPrime(X) = 1 (True) if 2^X - 1 is a Mersenne Prime else 0.


To the XPCalc and XCCalc I added:

1) Added procedure PiCh to compute Pi by the Chudnovsky brothers' binary
splitting algorithm.
2) Added function Fac2(X, Y) = Fac(X) / Fac(Y) by binary splitting.
3) Added function FacM2(X, Y) = Fac(X) / Fac(Y) Mod FMB by binary splitting.
4) Added function QuadR(a, b, c) = Roots of a*x^2 + b*x + c = 0, sets X1 and X2
5) Added function NormC(X, M, S) = Normal Cumulative distribution function (cdf)
6) Added function NormS(X) = Standard Normal Cumulative distribution function


To the floating-point version, XPCalc I added:

1) Nothing unique to XPCalc.


To the floating-point Complex version, XCCalc I added:

1) Phi and PhiP constants were missing.

2006-05-06 Published C# Version 3.2.2317.16760 of XICalc in XICalc32i.zip & .exe
2006-05-06 Published C# Version 3.2.2317.16809 of XPCalc in XPCalc32i.zip & .exe
2006-05-06 Published C# Version 3.2.2317.18557 of XCCalc in XCCalc32i.zip & .exe

------------

To all three versions of the program:

1) Fixed a problem with "Save" not correctly saving the learned line.
2) Fixed a problem reading the learned line from a number file.
3) Minor improvement to random number generator.
4) Minor change to clear Bernoulli number storage.


To the integer version, XICalc, I added:

1) Nothing unique to XICalc.


To the XPCalc and XCCalc I added:

1) Minor change in reading a number from a file.
2) Added bool writeExtra; // true if (aa) [bb] to be written with number.
3) Corrected lack of full accuracy in CuRt(x) function.


To the floating-point version, XPCalc I added:

1) Nothing unique to XPCalc.


To the floating-point Complex version, XCCalc I added:

1) Nothing unique to XCCalc.


To the floating-point Matrix version, XMCalc I added:

1) This is the first version released.

2006-06-27 Published C# Version 3.2.2368.29585 of XICalc in XICalc32j.zip & .exe
2006-06-27 Published C# Version 3.2.2368.29620 of XPCalc in XPCalc32j.zip & .exe
2006-06-27 Published C# Version 3.2.2368.29653 of XCCalc in XCCalc32j.zip & .exe
2006-06-27 Published C# Version 3.2.2368.29763 of XMCalc in XMCalc32j.zip & .exe

------------

Only XZCalc was in this release:

To the Complex Matrix version, XZCalc I added:

1) This is the first version released.

2006-07-21 Published C# Version 3.2.1.30119 of XZCalc in XZCalc32a.zip & .exe

------------

To all five versions of the program:

1) Added an Exit procedure to totally quit the program with no questions asked.

To the integer version, XICalc, I added:

1) Nothing unique to XICalc.

To the floating-point version, XPCalc I added:

1) Changed GCD(X, Y) and LCM(X, Y) to use the fractional part of X and Y.

To the floating-point Complex version, XCCalc and the Complex Matrix version,
XZCalc I added:

1) ClearSmall(MultiC z) // clear z.r or z.i if very small compared to the other
2) Changed GCD(X, Y) and LCM(X, Y) to use the Gaussian remainder of complex
numbers to get the Gaussian GCD and LCM.

To the floating-point Matrix versions, XMCalc and XZCalc I added:

1) CharPoly(M) = Characteristic polynomial of square matrix M
2) CompM(P) = Companion matrix of polynomial P
3) Deriv(P) = Derivative of polynomial P
4) Image(M) = Returns a basis for the image/range of matrix M
5) Integ(P) = Formal integral of polynomial P
6) PolAdd(X, Y) = Polynomial X + Y
7) PolDisc(P) = Discriminant of polynomial P
8) PolDiv(X, Y) = Polynomial X / Y, "Re" = remainder
9) PolEval(P, X) = Polynomial P evaluated at X
10) PolMod(X, Y) = Returns "Re" = remainder of polynomial X / Y
11) PolMonic(P) = Monic polynomial of P, leading coeff. = 1 or {0}
12) PolMul(X, Y) = Polynomial X * Y
13) PolNorm(P) = Norm of polynomial P, leading coeff. not zero or {0}
14) PolRecip(P) = Reciprocal polynomial of P, x^deg(P) * P(1/x)
15) PolSub(X, Y) = Polynomial X - Y
16) PolSturm(P) = Number of real roots in real polynomial P
17) PolSturmI(P, Y, Z) = Number of real roots in P in interval (X, Y)
18) RREF(M) = Return Reduced Row Echelon Form of matrix M
19) RREFa(M, V) = RREF solution U to augmented matrix [M,V], M*U=V
20) SolveH(M) = Solve for vectors U != 0 where matrix M * U = 0 (homogeneous
equations)
21) SVD(M) = Singular Value Decomposition, M = u * w * v^H

To the floating-point Matrix version, XMCalc I added: (was already in XZCalc)

1) Adj(M) = Adjoint matrix of square matrix M
2) Hilbert(X) = Equals an X by X Hilbert matrix
3) Pascal(X) = Equals an X by X Pascal triangle, Pij = Bino(i,j)
4) Vander(V) = Vandermonde's matrix from vector V

To the Complex Matrix version, XZCalc I added:

1) EigenVa(M) = Eigenvalues of square matrix M
2) EigenVe(M) = Eigenvectors of square matrix M
3) EigenVe2(M) = Eigenvectors of square matrix M by SVD
4) PolRoots(P) = All of the roots of polynomial P

2006-09-04 Published C# Version 3.2.11.17685 of XICalc in XICalc32k.zip & .exe
2006-09-04 Published C# Version 3.2.11.17714 of XPCalc in XPCalc32k.zip & .exe
2006-09-04 Published C# Version 3.2.11.17731 of XCCalc in XCCalc32k.zip & .exe
2006-09-04 Published C# Version 3.2.11.17748 of XMCalc in XMCalc32k.zip & .exe
2006-09-04 Published C# Version 3.2.11.17766 of XZCalc in XZCalc32k.zip & .exe

------------

Only XMCalc and XZCalc were in this release:

To the floating-point Matrix versions, XMCalc and XZCalc I added:

1) Added to the documentation for matrix calculations.
2) Fixed a problem in computing the determinant of a 1 by 1 matrix.
3) Fixed a problem in RREF(M) that affected Rank(M) also.
4) Changed SVD(M) to sort U, W, V so the elements of W would be ascending
5) Changed the max iterations in SVD from 30 to 300
6) Changed CharPoly(M) to support M = a scalar
7) Fixed a rare bug in Calc.SetToNM(MultiF x, MultiF z) // z = x, resized
that allowed z.M to be left > z.N
8) Balance(M) = Return a balanced matrix with same eigenvalues
9) Hess(M) = Return upper Hessenberg matrix, same eigenvalues
10) Fixed SolveH to delete near zero elements
11) Legen(X) = Legendre polynomial of order Int(X.r)
12) Cheby(X) = Chebyshev polynomial of Int(X.r)
13) A = X ** Y  =>  Set A to PolMul(X, Y)


To the Complex Matrix version, XZCalc I added:

1) Fixed a problem in EigenVe(M) and EigenVe2(M) returning a zero vector.
2) Fixed a problem in EigenVe2(M) caused by SVD(M) not sorting output.
3) Changed RN(X) with X a matrix to clear imaginary part of returned matrix.
4) Changed PolRoots(P) to accurately sort complex roots, effects EigenVe(M).
5) Fixed primitive op codes L and Lop(X) for complex matrices.
6) Fixed PolRoots(P) in Laguer(...) to give full precision roots in all cases.
7) MinPoly(M) = Minimal polynomial of square matrix M
8) Cyclo(X) = Cyclotomic polynomial of Int(X.r)
9) Changed SVD(M) to use ACM Algorithm 358 for SVD of a complex matrix

2006-11-03 Published C# Version 3.2.12.31927 of XMCalc in XMCalc32L.zip & .exe
2006-11-03 Published C# Version 3.2.12.31941 of XZCalc in XZCalc32L.zip & .exe

------------

To all five versions of the program:

1) Upgraded from MS Visual Studio 2003 to MS Visual Studio 2005.
2) Minor cosmetic changes
3) Updated: Copyright (c) 1981-2007 by author: Harry J. Smith


To the floating-point Matrix versions, XMCalc and XZCalc I added:

1) Fixed a problem in SVD(M) when M = has more rows than columns.


To the Complex Matrix version, XZCalc I added:

1) Made routine Complex SCD (CSVD) more C like vice Fortran.
2) SVD2(M) = SVD giving an m by m Matrix U by ACM Algo 358
3) SVDInv(U, W, V) = Inverse SVD = u * w * v^H

2007-01-19 Published C# Version 3.2.12.22972 of XICalc in XICalc32L.zip & .exe
2007-01-19 Published C# Version 3.2.12.22996 of XPCalc in XPCalc32L.zip & .exe
2007-01-19 Published C# Version 3.2.12.23039 of XCCalc in XCCalc32L.zip & .exe
2007-01-19 Published C# Version 3.2.13.23070 of XMCalc in XMCalc32m.zip & .exe
2007-01-19 Published C# Version 3.2.13.23102 of XZCalc in XZCalc32m.zip & .exe

------------

To all five versions of the program I added:

1) The variable muErr is put on the list and is set to a value of 1 (True) when
a multi-precision error occurs. Its purpose is to allow a code file to detect
when it has caused an error and adjust or terminate.


To XPCalc, XCCalc, XMCalc, and XZCalc I added:

1) The AFib(x) function to compute the ArcFibonacciNumber(|X.r|) an integer.
AFib(144) = 12.0. Only accurate if x is a Fibonacci Number.


To XPCalc and XMCalc I added:

1) Changed the Fib(x) function to compute the generalized Fibonacci function
when x is not an integer.


To XCCalc and XZCalc I added:

1) Changed the Fib(x) function to compute the generalized Fibonacci function
when x is not an integer and allow x to be a complex number.

2007-06-10 Published C# Version 3.2.13.17399 of XICalc in XICalc32m.zip & .exe
2007-06-10 Published C# Version 3.2.13.12019 of XPCalc in XPCalc32m.zip & .exe
2007-06-10 Published C# Version 3.2.13.12182 of XCCalc in XCCalc32m.zip & .exe
2007-06-10 Published C# Version 3.2.14.12196 of XMCalc in XMCalc32n.zip & .exe
2007-06-10 Published C# Version 3.2.14.12235 of XZCalc in XZCalc32n.zip & .exe

------------

To all five versions of the program I added:

1) Windows Vista had a problem with width of Startup, Run, History, and Help
forms. Added 8 pixels to StartupForm width and created AutoVista.X?C files to
add 8 pixels to width of Run, History, and Help forms.

2) Fixed an obscure problem when the X?CalcHist.txt had a line with less than 4
characters.


To XICalc I added:

1) Changed documentation to call FacS(x) etc. standard vice old slow method.
2) Speeded up the Save commands for large numbers and base = 10.
3) Speeded up the Save and Restore commands for large numbers and base != 10.
4) Added status output for the Save command.
5) Speeded up multiply when numbers had a lot of LSB zero digits.


To XICalc, XPCalc, XCCalc, XMCalc, and XZCalc I added:

1) Fixed several errors where internal decimal strings were not converted
correctly when the input base was not 10. Added public static void
ValueN10(string st, out int i, int zI).

2) Added Mersenne Prime number 44, power q44 = 32582657.


To XPCalc, XCCalc, XMCalc, and XZCalc I added:

1) Corrected an error in the documentation for AFib(X).
Changed:     AFib(x) = round(Ln(sqrt(5)*|x.r|) / Ln(Psi)).
to:          AFib(x) = round(Ln(sqrt(5)*|x.r|) / Ln(Phi)).

2) FacMS(X) = (Factorial of X) Mod FMB by standard method
    FacS(X) = Factorial of X by standard method

3) Changed the logic of when to use FacS(x) or Gam(x) when computing Fac(x) or
Gam(x) of a positive integer, for speedup. Also affects Bino(x, y).

4) Corrected and speeded up the factorial functions.
5) Corrected errors in Save and Restore when output base was not 10.
6) Fixed an error in Mod(x, y) when x was a lot larger than its precision.
7) Speeded up Bino(X, Y) under certain conditions. Much faster for high
precision.

8) Increased responsiveness of function keys and buttons when computing at very
large precision.


To XZCalc I added:

1) Fix a problem with several functions returning a non-zero imaginary part
when the input was a complex matrix, Gam1, Ri, Fac2, FacM2, Lerch1, LerchT,
Lerch2, and Bern.

2007-08-01 Published C# Version 3.2.14.9622  of XICalc in XICalc32n.zip & .exe
2007-08-01 Published C# Version 3.2.14.9870  of XPCalc in XPCalc32n.zip & .exe
2007-08-01 Published C# Version 3.2.14.9923  of XCCalc in XCCalc32n.zip & .exe
2007-08-01 Published C# Version 3.2.15.9952  of XMCalc in XMCalc32o.zip & .exe
2007-08-01 Published C# Version 3.2.15.9984  of XZCalc in XZCalc32o.zip & .exe

------------

Added XJCalc - Extra Precision Integer Matrix Calculator
to the group of C# calculator programs.

To all five previous versions of the program I added:

1) Changed messages "Have Bernoulli numbers upto B({n})" and
"Generating Bernoulli numbers upto B({n})" to be controlled by Quiet flag vice
Diag flag; to be the same as Euler numbers.

2) Fix an obscure error with GoUpTo when going to same line of code


To XICalc I added:

1) Dig(X, Y) = Number of base Y digits in X, Y >= 2
2) DigD(X) = Number of decimal digits in X
3) Minor mod to how 0 and 1 are formatted in an output number file


To XPCalc, XCCalc, XMCalc, and XZCalc I added:

1) Fixed CuRt(X) function to work for X==0.


To XMCalc and XZCalc I added:

1) Fixed a problem reading in a number file for a number that is a matrix when
the input base is not 10.

2) Added:
                SortC(X) = Sort each column of matrix X in numerical order
         SortCS(X, Y, Z) = Sort each column of matrix X, row Y thru Z
                SortR(X) = Sort each row of matrix X in numerical order
         SortRS(X, Y, Z) = Sort each row of matrix X, column Y thru Z

2007-10-21 Published C# Version 3.2.15.14481 of XICalc in XICalc32o.zip & .exe
2007-10-21 Published C# Version 3.2.1.35594  of XJCalc in XJCalc32a.zip & .exe
2007-10-21 Published C# Version 3.2.15.14963 of XPCalc in XPCalc32o.zip & .exe
2007-10-21 Published C# Version 3.2.15.15049 of XCCalc in XCCalc32o.zip & .exe
2007-10-21 Published C# Version 3.2.16.10319 of XMCalc in XMCalc32p.zip & .exe
2007-10-21 Published C# Version 3.2.16.11699 of XZCalc in XZCalc32p.zip & .exe

------------

To all six versions of the program I added:

1) Updated: Copyright (c) 1981-2008 by author: Harry J. Smith
2) SetM(X) => Set digits in Mantissa


To XICalc and XJCalc I added:

1) Changed SetMax(X) to be exactly the same as the M primitive op code

2)    Rev(X) = Digit Reversal of X base 10
   Rev(X, Y) = Digit Reversal of X base Y


To XPCalc, XCCalc, XMCalc, and XZCalc I added:

1) When a "Set digits in Mantissa" command increases the precision of the
calculations, the 8 constants, Cat, Ee, EulerC, Ln10, Phi, PhiP, Pi, and Ubiq,
are removed from the list if there.

2) Changed the P primitive command to be like the Pi command, if Pi is not on
the list it is added with extra digits if not the top item. Other functions can
leave Pi on the list with extra digits also. The Ln10 command was changed to be
like the Pi command.

3) Changed the Cat, Ee, EulerC, Phi, PhiP, and Ubiq commands to recomputed the
constant if it looked bad (not fool proof though).

4) Added  BernG(X) = Generalized Bernoulli number B(X).
5) Added  EulerG(X) = Generalized Euler number E(X).
6) Added  BernDL(X) = Denominator of Large Bernoulli number B(Int(X))
7) Added  BernNL(X) = Numerator of Large Bernoulli number B(Int(X))

8) In Beta(X), changed "For x < -313, the reflection formula is used" to x <
0.5. Some Beta(X) values were inaccurate.

9) Added several functions from XICalc:

Primitive op codes:
  # => Primorial (like factorial)

Procedures:
  AllD(X) => Compute all divisors of X
   PFA(X) => Run prime factor algorithm A on X
   PFB(X) => Run prime factor algorithm B on X
   PFE(X) => Run prime factor algorithm ECM on X (fastest)
  PTab(X) => Write prime table to XICalcPTab.txt, X primes

Functions:
     BinoS(X, Y) = Binomial coefficient (X, Y) by standard method
      Chin(X, Y) = add to Chinese remainder problem z == X mod Y
     Chin1(X, Y) = Initialize Chinese remainder with X1, Y1
       Dig(X, Y) = Number of base Y digits in X, Y >= 2
         DigD(X) = Number of decimal digits in X
      GCDe(X, Y) = Extended GCD(X, Y) = X*X1 + Y*Y1
       Inv(X, Y) = Z = Inverse of X Mod Y, X*Z == 1 Mod Y
         IsSq(X) = 1 (True) if X is a square, else 0
      Kron(X, Y) = Kronecker-Legendre symbol X over Y
          MEq(X) = Mersenne equation = 2^X - 1
      Mord(A, N) = Multiplicative order of base A (mod N) or 0
          MPG(X) = The X'th Mersenne Prime Generator, MPG(1) = 3
          MPP(X) = Mersenne Prime Power, MPP(1) = 2
       MPrime(X) = 1 (True) if 2^X - 1 is a Mersenne Prime else 0
           Mu(X) = Moebius Mu(X) function
            P(X) = The X'th prime
          PEq(X) = Perfect equation = (2^X - 1) * 2^(X-1)
          PGT(X) = First prime > X
          Phi(X) = Euler's totient function
      PhiL(X, A) = Legendre's formula
           Pi(X) = Number of primes <= X by sieve or Lehmer
          PiL(X) = number of primes <= X by Lehmer's formula
         PiL1(X) = number of primes <= X by Legendre's formula
          PiM(X) = number of primes <= X by Meissel's formula
          PLT(X) = Largest prime < X
          PNG(X) = The X'th Perfect Number Generator, PNG(1) = 6
        Prime(X) = 1 (True) if X is Prime else 0
        Primo(X) = Primorial, product of all primes <= X
        PrimR(X) = Largest and smallest primitive root of X or 0
       PrimRP(X) = Largest and smallest prime primitive root of X
    PrimRQ(X, Y) = 1 (True) if X is a primitive root of Y, else 0
          Rev(X) = Digit Reversal of X base 10
       Rev(X, Y) = Digit Reversal of X base Y
          Sig(X) = Sum of divisors of X
         Sig0(X) = Sum of divisors of X (-X)
  Solve(X, Y, N) = Solve for z, X * z == Y Mod N
      Sord(A, N) = Multiplicative suborder of base A (mod N) or 0
       SqFree(X) = 1 (True) if X is a squarefree, else 0
      SumD(X, Y) = Sum of base Y digits in X, Y >= 2
        SumDD(X) = Sum of decimal digits in X
          Tau(X) = Number of divisors of X

2008-02-24 Published C# Version 3.2.16.36455 of XCCalc in XCCalc32p.zip & .exe
2008-02-24 Published C# Version 3.2.16.36483 of XICalc in XICalc32p.zip & .exe
2008-02-24 Published C# Version 3.2.2.36516  of XJCalc in XJCalc32b.zip & .exe
2008-02-24 Published C# Version 3.2.17.36536 of XMCalc in XMCalc32q.zip & .exe
2008-02-24 Published C# Version 3.2.16.36559 of XPCalc in XPCalc32p.zip & .exe
2008-02-24 Published C# Version 3.2.17.36589 of XZCalc in XZCalc32q.zip & .exe

------------

To all six versions of the program I added:

1) Added EnvironmentVariable("COMPUTERNAME") and "USERNAME" to system name.
EnvironmentVariable("SYSTEM") was not available in VISTA.

Run on: Harry's Intel 3 GHz Pentium 4 - Dell XPS Gen 2 - Windows XP Pro SP2
DGV4T641 by Harry Smith


To XMCalc and XZCalc I added:

1) ContFrac(X) = Continued fraction expansion of x
2) ContFrac(X, Y) = Continued fraction expansion of x with y terms
3) ContFracV(X) = Value of continued fraction x


To XPCalc, XCCalc, XMCalc, and XZCalc I added:

1) Fixed a problem with Bata(X) with 90000 digits giving an error
2) Added  BetaL(X) = Dirichlet beta function for large |X|
3) Added  EulerL(X) = Generalized Euler number E(X) for large |X|

2008-05-02 Published C# Version 3.2.18.25421 of XCCalc in XCCalc32r.zip & .exe
2008-05-02 Published C# Version 3.2.18.25450 of XICalc in XICalc32r.zip & .exe
2008-05-02 Published C# Version 3.2.18.25474 of XJCalc in XJCalc32r.zip & .exe
2008-05-02 Published C# Version 3.2.18.25507 of XMCalc in XMCalc32r.zip & .exe
2008-05-02 Published C# Version 3.2.18.25534 of XPCalc in XPCalc32r.zip & .exe
2008-05-02 Published C# Version 3.2.18.10029 of XZCalc in XZCalc32r.zip & .exe

------------

To all six versions of the program I added:

1) Fixed a major problem with SqRt(x) for some numbers that call
MultiID.SqRtRemSlowSI(MultiSI x, MultiSI r, MultiSI z). For example
SqRt(91258893,03356221,57253936,60000000,00000000,00000000,00000000,00000000)
added t2 += 3; // HJS 2008-08-23, this fixed a problem with...
after t2 = (long)Math.Floor(Math.Sqrt(tD)); for this routine

2) Fixed minor problem with Re not set to zero when result including Re could
not be computed. Also tested for Re index == Common.iTop and could not be
computed

3) Fixed a problem with log file being read only in Common.ChkAppend

4) Fixed a problem in Configuration Form of not displaying Modulo Base (FMB)
when updated

5) After F10 hit other function keys do not respond, so changed Clear Input to
Ctrl+F11

6) changed muNMax = max number of super digits in a multi-precision from
8388650 to 16777300 allowing 134218400 vice 67109200 decimal digits.

7) Put a MuInterrupt(); test inside inner loop in IpMul subroutine in
MultiID.cs. Was getting (Not Responding) for large multiplies when FHT mode was
off


To XICalc and XJCalc I added:

1) Changed IsSq(X) so x < 0 is never called square

2) Speeded up x=a^b when a=10 or a=-10 and b >= 0, especially for large
precision. Also works for Pow(a, b) but not PowM(a, b)

To XMCalc and XZCalc I added:

1) Corrected Help and .doc file for
PolSturmI(P, X, Y) = Number of real roots in P in interval (X, Y)

2) Fixed error in Z = DivRem(X, Y) when X is a matrix and Z == Re


To XPCalc, XCCalc, XMCalc, and XZCalc I added:

1) Added    IsFib(X) = 1 (True) if X is a Fibonacci number, else 0
2) Added   IsFib2(X) = IsFib(X) by second method
3) Added  SqRtRem(X) = Floor(SquareRoot(X)) and set Re to remainder
4) Changed IsSq(X) so a non-integer and x < 0 is never called square.
Corrected .doc files

5) Added a recovery method in FHT:
  FHT Sum-of-Digits failed, error in FHT multiply!!!!!!!
  FHT Recovered from failure/probable error in FHT multiply
This is probably needed because of an error in the memory or the CPU

6) Fixed a problem in DivF.MultiFD when digits in mantissa was very large
causing a "Floating shift left overflow, continuing..." alarm

7) Speeded up x=a^b when a=10 or a=-10 and b is an integer, especially for
large precision. Also works for Pow(a, b) but not PowM(a, b)

8) Changed Int64.MinValue to -Int64.MaxValue in several places to prevent
Int64.MinValue being an exponent .C. Values this small were displayed as 0.0

2008-09-12 Published C# Version 3.2.19.35351 of XCCalc in XCCalc32s.exe & .zip
2008-09-12 Published C# Version 3.2.19.35363 of XICalc in XICalc32s.exe & .zip
2008-09-12 Published C# Version 3.2.19.35376 of XJCalc in XJCalc32s.exe & .zip
2008-09-12 Published C# Version 3.2.19.35389 of XMCalc in XMCalc32s.exe & .zip
2008-09-12 Published C# Version 3.2.19.35402 of XPCalc in XPCalc32s.exe & .zip
2008-09-12 Published C# Version 3.2.19.35417 of XZCalc in XZCalc32s.exe & .zip

------------
To all six versions of the program I added:

1) Mersenne primes #45 and #46. P45 = 37156667, P46 = 43112609.
used in MPP(45), MPP(46), MPG(45), and MPG(46).
2) Donot display "Number not completely factored" if in "Quiet" mode.


To XICalc and XJCalc I added:

1) D1Line(X) => Set display numbers on a single line on if X != 0, else off
   DBool(X) => Set display Boolean state (False/True) if X != 0, else off
   DDig(X) => Set display number of digits in a numbers on if X != 0, else off

2008-03-16 Published C# Version 3.2.20.24842 of XCCalc in XCCalc32t.exe & .zip
2008-03-16 Published C# Version 3.2.20.17476 of XICalc in XICalc32t.exe & .zip
2008-03-16 Published C# Version 3.2.20.28104 of XJCalc in XJCalc32t.exe & .zip
2008-03-16 Published C# Version 3.2.20.28425 of XMCalc in XMCalc32t.exe & .zip
2008-03-16 Published C# Version 3.2.20.28561 of XPCalc in XPCalc32t.exe & .zip
2008-03-16 Published C# Version 3.2.20.28597 of XZCalc in XZCalc32t.exe & .zip

------------
