xlPrecision is an Add-In for Microsoft Excel* that provides
vastly more precise results from mathematical formulas than Excel provides on
its own. xlPrecision makes your calculation results up to 2,183.47 times more
precise by providing up to 32,767 "significant digits" of precision,
compared to only 15 with Excel alone. A special edition of xlPrecision created
at the request of a
number
theorist provides over 2 Billion significant digits of
precision.

xlPrecision allows you to do arithmetic and other numeric
analysis on very large numbers without rounding or truncating your numbers to 15
digits, as Excel does on its own. Don't be held back by Excel's limitation of
only 15 significant digits!

xlPrecision also empowers you to use vastly larger (and vastly
smaller) numbers than Excel allows on its own. With xlPrecision, you can use
gigantic numbers with over 106 TIMES as many digits as Excel allows,
as well as extremely tiny numbers with over 106 times as many zeroes to the
right of the decimal.

Finally, xlPrecision offers many additional features that take you beyond
Excel's capabilities in other ways. Save valuable time with xlPrecision's
powerful Excluder functions. View your sorted data at a glance with the
exceptional sorting function. Take control of your fractional data with the
versatile fraction reducer. See Data Control & Analysis Features.

Excel does not allow changing the behavior of its built-in
operators and worksheet functions, so it is not possible for xlPrecision to apply high precision to your
existing worksheet formulas. Using xlPrecision requires modifying your worksheet
formulas by replacing Excel's built-in operators and functions with xlPrecision's custom
worksheet functions. Of course, you only have to modify those formulas from
which you want high precision.

For example, to get high precision from this worksheet
formula:

=2/3

You would need to change the formula to this:

=xlpDIVIDE(2,3)

See the
Function Reference for a complete
list of xlPrecision functions and more information about using them.

Without xlPrecision, Excel provides a maximum of 15 digits of precision, or
"significant digits". For example, if you divide 67 by 89, the result is an
infinite number of digits long. But Excel rounds it off to 15 significant
digits:

=67/89

0.752808988764045

xlPrecision provides up to 32,767 significant digits, more
than 2,000 times more than Excel:

But "significant digits" does not simply mean the number
of decimal places. Significant digits is the quantity
of digits from the
left-most non-zero digit to the right-most non-zero digit.
That series of
digits can be anywhere relative to the decimal point. For example, if you
multiply 987,654,321,098,765 by 123,456,789,012,345, the correct answer is an
integer 30 digits long. Excel rounds it off to 15 digits:

=987654321098765*123456789012345

121,932,631,137,021,000,000,000,000,000

xlPrecision provides all 30 digits:

=xlpMULTIPLY("987654321098765","123456789012345")

121,932,631,137,021,071,359,549,253,925

Another edition of xlPrecision,
with 2,147,483,648 (over TWO BILLION) significant digits, is also
available. It is intended for use in your programming code rather than
within Excel worksheets, as it can return more characters than Excel can
accept in a worksheet cell. For more information about the 2,147,483,648
SD Edition, see the VBA page.

Without xlPrecision, Excel truncates your numbers to 15
significant digits. For example, if you enter this number in Excel:

123456789123456789

Excel truncates it to this. Notice that Excel doesn't even
round it correctly; instead it just replaces all digits after the 15th digit
with zeros:

123456789123456000

Even if you preserve all the digits by typing a leading
apostrophe or pre-formatting the cell as text, Excel still truncates it to 15
digits before doing any arithmetic or any other kind of numeric analysis. For
example, if you type this into cell A1, including the leading apostrophe:

'123456789123456789

And enter this formula in cell A2:

=A1+0

Excel returns this in cell A2:

123456789123456000

Excel truncated your number down to 15 digits to do even
the simplest imaginable arithmetic operation, adding zero.

xlPrecision returns the correct number with no rounding or
truncating:

=xlpADD(A1,0.1)

123456789123456789.1

xlPrecision does NOT round or
truncate your numbers in Excel. xlPrecision does
its arithmetic and other numeric analysis in Excel using ALL the digits
you type in, up to 32,767 digits per number.

xlPrecision also eliminates binary conversion errors,
which often hide undetected until suddenly making a spreadsheet give an
incorrect result. Like all other spreadsheet programs, Excel converts your
numbers to binary before sending them to the microprocessor to do the
arithmetic. But the conversion is often approximate. Then, when the
microprocessor completes the arithmetic and returns the binary result, Excel
converts it back to base 10. That conversion, too, is often approximate. Though
each error is small, they can still cause incorrect spreadsheet results.

To see a simple example of a binary conversion error:

Subtract 1,000 from 1,000.8. The result looks like
0.8, but an error is hiding
in there. To reveal the hidden error, right-click the cell, choose Format Cells,
select the Number category on the Number tab, increase Decimal Places to 15 or
more, and click OK. Now it says 0.799999999999955.
Thatís a binary conversion error. Formulas in dependent cells are given the
incorrect number no matter how that cell is formatted.

=1000.8-1000

0.799999999999955(If you get 0.8, be sure to right-click
the cell, choose Format Cells, select the Number category on the Number tab,
increase Decimal Places to 15 or more, and click OK, revealing the real number
stored and passed to other formulas that reference that cell.)

xlpSUBTRACT gets the difference exactly
correct, and exactly the same as xlpMDETERM's result:

1022621167.827023

Not only is Excel over 2% off, it can't even
decide which wrong number to return!

Excelís rounding functions can be used to mask some of
Excel's binary
conversion errors, but not all. And, since those functions are based on the
rounded digitís decimal place rather than on the number of significant digits,
you canít always be sure what rounding formula is needed. Even worse is trying
to use Excel's "Precision as Displayed" feature to get around binary conversion
errors, because that can cause errors in other parts of the spreadsheet and
workbook, and requires constant monitoring of most formulas to make sure that as
many digits are displayed as possible or as required, without showing a binary
conversion error. xlPrecision is a much better solution to binary conversion
errors than Excel's rounding functions or Excel's "Precision as Displayed"
feature.

Binary conversion errors may seem
small, but they are stealthy and cause unexpected problems without
warning. During the Gulf War, a binary conversion error led to the deaths
of 28 American soldiers (and around 100 injured) on February 25th, 1991
when an American Patriot missile failed to intercept an Iraqi SCUD missile
headed toward their Army barracks. The error was caused by storing time in
1/10 second increments, with binary conversion errors
on converting 0.1 to binary. Though each conversion error was tiny, the
error accumulated enough to make the Patriot's navigation software miss
the SCUD, which then reached its target. Never
underestimate the insidious, destructive power of binary conversion
errors.

Very Large & Very Small Numbers

xlPrecision lets you use vastly larger -- and vastly
smaller -- numbers than you can with Excel alone.

The largest number Excel can accept, use, or return is
1.79769313486231E+308. This number is formatted in "scientific notation".
"E+308" means "move the decimal 308 places to the right".

The largest number xlPrecision in Excel can accept, use,
or return is 32,767 9's, which for comparison purposes here could be rounded off
to 9.99999999999999E+32766.

That number is 32,458 digits longer than Excel's largest
-- over 106 TIMES as many digits!

For example, if you enter this in cell A1:

1.23E+308

And enter this formula in cell A2:

=A1+A1

Excel returns an error ("#VALUE!"),
because the sum is too large of a number for Excel.

xlPrecision returns the correct answer:

=xlpADD(A1,A1,,,,TRUE)

2.46E+308

One example of what a
difference this can make is that the largest factorial Excel can calculate is 170!
(which is 307 digits long),
because 171! would require too many (310) digits. xlPrecision can calculate factorials
up to 9,273!, which is 32,764 digits long (9274!
would require 32,768 digits).

The smallest number Excel can accept, use, or return is
2.2250738585072E-308. This number is formatted in "scientific notation".
"E-308" means "move the decimal 308 places to the left".

xlPrecision's smallest number is 32,767 total characters
long including the leading "0.", which in exponential notation is
1.00000000000000E-32765. That's 32,457 digits longer (and therefore that much
closer to zero) than Excel's smallest, or
again over 106 times as many digits.

If your spreadsheet calculations go beyond Excel's ability
to store tiny numbers, Excel automatically and without warning
converts
the number to 0 instead of returning an error, as it correctly does if your
spreadsheet calculations go beyond Excel's ability to store huge numbers. In
addition to allowing vastly smaller numbers than Excel, xlPrecision does not
convert to 0 if you exceed even xlPrecision's ability to use tiny numbers.
Instead, xlPrecision correctly returns an error in that case.

For example, if you enter this in cell A1:

3.21E-308

And enter this formula in cell A2:

=A1/10

Excel returns exactly zero in
cell A2, because the result is too small of a number for Excel, and because
Excel does not return an error as it should when the result is too small for
Excel:

0.00E+00

xlPrecision returns the correct answer:

=xlpDIVIDE(A1,10,,,,TRUE)

3.21E-309

And xlPrecision can get much closer to zero than that:

=xlpDIVIDE(A1,"1E+32000",,,,TRUE)

3.21E-32308

That number is extremely closer
to zero than Excel can go.

Just to show only one example of what a difference this
can make, the largest factorial Excel can calculate is 170! (which is 307 digits
long), because 171! would require too many (310) digits. xlPrecision can
calculate factorials up to 9,273!, which is 32,764 digits long (9274! would
require 32,768 digits).

Internationalization

This means that an xlPrecision formula that returns "$1,234,567.89" in the
USA will return:

"1.234.567,89 Ä" in Germany

"1 234 567,89 Ä" in France

"1 234 567.89 kr" in Estonia

"1.234.567,89Lek" in Albania

Of course, 1,234,567.89 US dollars is not
the same amount of money as 1,234,567.89 Euros. However, this is how Microsoft
Excel does it. By duplicating the way Microsoft Excel handles currency
internationalization, xlPrecision allows you to internationalize currency in
the same way you always have with Microsoft Excel.

You can see this on your computer by following these
steps:

Enter the formula "=xlpADD(1234567.89,0,,TRUE,TRUE)"
(requires xlPrecision to be installed; the Free
Edition of xlPrecision will work for this example).

Note that the result is formatted with your local
currency symbol, decimal symbol, and thousands separator. You might want to
increase the font size to make it easier to see the symbols.

Open the "Regional and Language Options" Control Panel.
(Start | Control Panel).

On the "Regional Options" tab, change from your
language to one of the choices in the list above, such as "German (Germany)".

Click Apply. Note that Excel recalculates, and the
formula now returns the number formatted with the currency symbol, decimal
symbol, and thousands separator of the language you chose ("1.234.567,89 Ä" if
you chose German).

Remember to change back to your local language.

Use xlPrecision in VBA

xlPrecision's worksheet functions can also be used in
Excel VBA (Visual Basic for Applications, Excel's programming language),
as well as any other Automation (ActiveX, OLE, COM) client that can automate an
Automation server. Here's how.

High Precision in Non-xlPrecision Functions

xlPrecision replaces mathematical operators, comparison
operators, and built-in worksheet functions with custom worksheet functions. Other worksheet functions, whether
built-in or provided by an add-in, do not use the xlPrecision worksheet
functions, and so do not gain precision from them.

If you're building a cell formula that uses other worksheet functions, and use
xlPrecision functions instead of operators in the formula, then you gain
precision between those other functions, but not within them.

It's possible for add-in worksheet functions to use
xlPrecision instead of operators. xlPrecision, once installed, includes a DLL
that can be called by other programming code, including the programming code
that is used to build add-in worksheet functions. If that code uses xlPrecision
functions instead of mathematical operators, it can gain precision. Unless, of
course, that same code also calls other functions that, in turn, use
mathematical operators, at which point the extra precision is discarded.

Microsoft is unlikely to ever be interested in using
xlPrecision to add high precision to Excel's built-in formulas. However, in a
future version of xlPrecision I plan to duplicate all of the relevant built-in
Excel functions with equivalent high-precision xlPrecision functions.

If you want high precision in custom functions provided by
another Excel Add-In, you might want to contact the authors of that other Add-In
and suggest that they use xlPrecision in a future version. For information on
how the programming code that is used to build add-in worksheet functions can
call xlPrecision functions to gain precision, click
here.

Not an Excel Problem

Excel's limitation of 15 significant digits is not caused by Excel or
Microsoft. All other spreadsheet programs, including Lotus 123 and Corel Quattro
Pro, have the same limitation. The limitation is enforced by the microprocessor.
All Intel, Intel-compatible, Macintosh, and UNIX microprocessors have the same
limitation.

The 15 significant digit limitation is part of an industry standard called "IEEE
754", which was created to achieve faster processing by sacrificing precision.
IEEE 754 was ratified in 1985, by which time it had already become a de facto
standard.

xlPrecision does not use the microprocessor to perform arithmetic,
except in cases where it can be 100% certain that IEEE 754 will have no effect
and that no binary conversion error will occur, such as 5 x 5 = 25. As a result, the
microprocessor is unable to require xlPrecision to adhere to IEEE 754.
xlPrecision completely ignores IEEE 754.

Try the Free Edition

Ready to try the Free Edition of xlPrecision? You can use
it for as long as you like. Download it here. Then, see the quick & easy
Quick-Start Tutorial.