<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.nars2000.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Drab</id>
	<title>NARS2000 - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.nars2000.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Drab"/>
	<link rel="alternate" type="text/html" href="https://wiki.nars2000.org/index.php?title=Special:Contributions/Drab"/>
	<updated>2026-05-08T07:31:58Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.38.7</generator>
	<entry>
		<id>https://wiki.nars2000.org/index.php?title=Ball_Arithmetic&amp;diff=3373</id>
		<title>Ball Arithmetic</title>
		<link rel="alternate" type="text/html" href="https://wiki.nars2000.org/index.php?title=Ball_Arithmetic&amp;diff=3373"/>
		<updated>2018-10-26T10:17:05Z</updated>

		<summary type="html">&lt;p&gt;Drab: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
Ball&amp;lt;ref name=&amp;quot;BallArithmetic&amp;quot;&amp;gt;NARS2000 Wiki, [http://arblib.org Ball Arithmetic]&amp;lt;/ref&amp;gt; and Interval Arithmetic&amp;lt;ref name=&amp;quot;IntervalArithmetic&amp;quot;&amp;gt;Wikipedia, [https://en.wikipedia.org/wiki/Interval_arithmetic Interval Arithmetic]&amp;lt;/ref&amp;gt; both refer to the same idea of calculating with arbitrary precision inexact numbers &amp;amp;mdash; that is, with a range of floating point values instead of a single representative.  This allows such numbers to reflect their inexactness explicitly.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;The most common use is to keep track of and handle rounding errors directly during the calculation and of uncertainties in the knowledge of the exact values of physical and technical parameters. The latter often arise from measurement errors and tolerances for components or &#039;&#039;&#039;due to limits on computational accuracy&#039;&#039;&#039;. Interval arithmetic also helps find reliable and guaranteed solutions to equations and optimization problems.&amp;quot;&amp;lt;ref name=&amp;quot;IntervalArithmetic&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The difference between the two is in how each approach represents its values:  Interval Arithmetic uses the two ends of the interval &amp;lt;apll&amp;gt;[a, b]&amp;lt;/apll&amp;gt; whereas Ball Arithmetic uses a Ball with a Midpoint and Radius.  Each has its advantages.  Interval Arithmetic is implemented by several libraries such as MPFI&amp;lt;ref name=&amp;quot;MPFI&amp;quot;&amp;gt;[http://perso.ens-lyon.fr/nathalie.revol/software.html MPFI]&amp;lt;/ref&amp;gt; and Ball Arithmetic is implemented by ARB&amp;lt;ref name=&amp;quot;BallArithmetic&amp;quot; /&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
This feature uses the ARB&amp;lt;ref name=&amp;quot;BallArithmetic&amp;quot; /&amp;gt; library to implement Ball Arithmetic.&lt;br /&gt;
&lt;br /&gt;
==Environment==&lt;br /&gt;
&lt;br /&gt;
In the examples below, unless otherwise specified, the precision of multi-precision floating-point numbers is set to &amp;lt;apll&amp;gt;53&amp;lt;/apll&amp;gt; bits via &amp;lt;apll&amp;gt;⎕FPC←53&amp;lt;/apll&amp;gt; which is the same precision as standard double-precision numbers.  The Printing Precision is set to &amp;lt;apll&amp;gt;17&amp;lt;/apll&amp;gt; digits via &amp;lt;apll&amp;gt;⎕PP←17&amp;lt;/apll&amp;gt; so as to display the maximum number of significant digits at &amp;lt;apll&amp;gt;53&amp;lt;/apll&amp;gt; bits of precision.  The Comparison Tolerance is set via &amp;lt;apll&amp;gt;⎕CT←1&amp;lt;_E/&amp;gt;¯10&amp;lt;/apll&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Calculating With Ball Arithmetic==&lt;br /&gt;
&lt;br /&gt;
If you have ever entered an expression such as&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
      ÷3&lt;br /&gt;
0.3333333333333333&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
undoubtedly, you are aware that the result is inexact.  Moreover, as you incorporate into your code the many other functions that produce inexact numbers, you should be wondering &amp;quot;How does the accumulation of inexactness affect my results?&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The answer to that question lies in the province of [https://en.wikipedia.org/wiki/Numerical_analysis Numerical Analysis] where it is described as &amp;quot;the study of algorithms that use numerical approximation&amp;quot;.  In general, applying the techniques of Numerical Analysis often involves time-consuming analysis.  Fortunately, Ball Arithmetic is an easy to use alternative to that.  That is, instead of analyzing the algorithm, run the algorithm with all calculations done with Ball Arithmetic.&lt;br /&gt;
&lt;br /&gt;
Here is the same expression in Ball Arithmetic (use Alt-‘q’ or Ctrl-‘q’, depending on your keyboard layout, to enter the &amp;lt;apll&amp;gt;&amp;lt;_pom/&amp;gt;&amp;lt;/apll&amp;gt; symbol):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
      ÷3&amp;lt;_pom/&amp;gt;&lt;br /&gt;
0.3333333333333333&amp;lt;_pom/&amp;gt;5.6&amp;lt;_E/&amp;gt;¯17&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Essentially, each Ball Arithmetic number carries with it an explicit Radius that describes the interval which contains the true value.  Because Ball Arithmetic data propagates throughout a calculation and is never demoted to a lower datatype, its advantage is that after each operation the resulting Ball reliably includes the true answer.  Across an entire algorithm, the final result is a Ball that indicates explicitly how precise it is, thus eliminating the guesswork as to the effect on the algorithm of the inexactness of the input and any other inexact constants used.&lt;br /&gt;
&lt;br /&gt;
For example,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
      sqrt←{⍺←= ⋄ {0.5×⍵+⍺÷⍵}⍣⍺⍨⍵} ⍝ Calculate square root using Newton&#039;s method&lt;br /&gt;
      √2&amp;lt;_pom/&amp;gt;&lt;br /&gt;
1.414213562373095&amp;lt;_pom/&amp;gt;2.2&amp;lt;_E/&amp;gt;¯16&lt;br /&gt;
      sqrt 2&amp;lt;_pom/&amp;gt;&lt;br /&gt;
1.414213562373095&amp;lt;_pom/&amp;gt;1.1&amp;lt;_E/&amp;gt;¯15 &lt;br /&gt;
      10 sqrt 2&amp;lt;_pom/&amp;gt;&lt;br /&gt;
1.414213562373095&amp;lt;_pom/&amp;gt;2.8&amp;lt;_E/&amp;gt;¯15 &lt;br /&gt;
      100 sqrt 2&amp;lt;_pom/&amp;gt;&lt;br /&gt;
1.414213562373095&amp;lt;_pom/&amp;gt;3.3&amp;lt;_E/&amp;gt;¯14 &lt;br /&gt;
      1000 sqrt 2&amp;lt;_pom/&amp;gt;&lt;br /&gt;
1.414213562373095&amp;lt;_pom/&amp;gt;3.3&amp;lt;_E/&amp;gt;¯13 &lt;br /&gt;
      10000 sqrt 2&amp;lt;_pom/&amp;gt;&lt;br /&gt;
1.414213562373095&amp;lt;_pom/&amp;gt;3.5&amp;lt;_E/&amp;gt;¯12&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As you can see, after a few iterations, the accuracy of the result doesn&#039;t improve.  However, because it is an iterative algorithm, the precision worsens as the number of iterations increases.  Only by using Ball Arithmetic can you see just how the precision of the result is affected.&lt;br /&gt;
&lt;br /&gt;
To demonstrate with an extreme example, consider the following function:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
      f←{⍪⍵-3√(⍵*3)-⍵*2}&lt;br /&gt;
      f 10*3×⍳5&lt;br /&gt;
0.33344450621439137&lt;br /&gt;
0.3333334452472627 &lt;br /&gt;
0.33333444595336914&lt;br /&gt;
0.3348388671875    &lt;br /&gt;
2.25&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Without knowing much about this ([https://en.wikipedia.org/wiki/Condition_number ill-conditioned]) algorithm, you have no reason to suspect these results.  As it turns out, there&#039;s a mathematical proof that as the argument increases to infinity, the algorithm converges to &amp;lt;apll&amp;gt;÷3&amp;lt;/apll&amp;gt;.  Only when you calculate with Ball Arithmetic do you see that there is a problem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
      f 10*3×⍳5&amp;lt;_pom/&amp;gt;&lt;br /&gt;
0.3334445062153009&amp;lt;_pom/&amp;gt;2.2&amp;lt;_E/&amp;gt;¯12  &lt;br /&gt;
0.3333334461785853&amp;lt;_pom/&amp;gt;4.3&amp;lt;_E/&amp;gt;¯9   &lt;br /&gt;
0.333337664604187&amp;lt;_pom/&amp;gt;0.0000062&lt;br /&gt;
0.3385009765625&amp;lt;_pom/&amp;gt;0.0085&lt;br /&gt;
1.25&amp;lt;_pom/&amp;gt;5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As you can see, the precision worsens quickly to the point where the result is meaningless.  The last line even says that the answer lies somewhere between &amp;lt;apll&amp;gt;¯3.75&amp;lt;/apll&amp;gt; and &amp;lt;apll&amp;gt;6.25&amp;lt;/apll&amp;gt;.  In other words, that answer is so &#039;&#039;&#039;imprecise&#039;&#039;&#039; as to be &#039;&#039;&#039;inaccurate&#039;&#039;&#039;!  At higher powers of ten, the answers only worsen.&lt;br /&gt;
&lt;br /&gt;
The good news with Ball Arithmetic is that if you need greater precision, just increase the value of &amp;lt;apll&amp;gt;⎕FPC&amp;lt;/apll&amp;gt;.  For example,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
      ⎕FPC←128 ⋄ ⎕PP←40&lt;br /&gt;
      sqrt 2&amp;lt;_pom/&amp;gt;&lt;br /&gt;
1.41421356237309504880168872420969807857&amp;lt;_pom/&amp;gt;5.9&amp;lt;_E/&amp;gt;¯39&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the case of an ill-conditioned algorithm, we just push the problem off a bit, but not very far &amp;amp;mdash; the problem is that the algorithm requires infinite precision:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
      f 10*3×⍳10&amp;lt;_pom/&amp;gt;&lt;br /&gt;
0.333444506214021971364848444464298690637&amp;lt;_pom/&amp;gt;3.4&amp;lt;_E/&amp;gt;¯35&lt;br /&gt;
0.333333444444506172880658466392407138179&amp;lt;_pom/&amp;gt;1.1&amp;lt;_E/&amp;gt;¯31&lt;br /&gt;
0.333333333444444444506172839632668381652&amp;lt;_pom/&amp;gt;1.6&amp;lt;_E/&amp;gt;¯28&lt;br /&gt;
0.333333333333444444444444547458328123363&amp;lt;_pom/&amp;gt;2.2&amp;lt;_E/&amp;gt;¯25&lt;br /&gt;
0.333333333333333444444619474517508476812&amp;lt;_pom/&amp;gt;3.2&amp;lt;_E/&amp;gt;¯22&lt;br /&gt;
0.333333333333333333552432522356445687706&amp;lt;_pom/&amp;gt;1.3&amp;lt;_E/&amp;gt;¯19&lt;br /&gt;
0.333333333333333491771410805881714622956&amp;lt;_pom/&amp;gt;4.5&amp;lt;_E/&amp;gt;¯16&lt;br /&gt;
0.333333333333417414223731611855328083038&amp;lt;_pom/&amp;gt;4.5&amp;lt;_E/&amp;gt;¯13&lt;br /&gt;
0.33333333363771089352667331695556640625&amp;lt;_pom/&amp;gt;4.5&amp;lt;_E/&amp;gt;¯10 &lt;br /&gt;
0.3333334587514400482177734375&amp;lt;_pom/&amp;gt;2.6&amp;lt;_E/&amp;gt;¯7&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
While your floating point code might not be so ill-conditioned, the only way to be sure of its results is one of&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Hire a Numerical Analyst&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Become a Numerical Analyst&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Use Ball Arithmetic&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Ball Arithmetic Numbers==&lt;br /&gt;
&lt;br /&gt;
A Ball Arithmetic number consist of two parts:  a Midpoint and Radius.  The Midpoint value represents the middle of the Ball and the Radius represents the distance around the Ball of possible values.  There is no way to tell which value in the Ball is the correct answer &amp;amp;mdash; you should assume that all values are potential candidates.  &lt;br /&gt;
&lt;br /&gt;
The precision at which the Midpoint and Radius are stored depends upon the current value of &amp;lt;apll&amp;gt;⎕FPC&amp;lt;/apll&amp;gt;.  For example, the following display&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
      ⎕FPC←53&lt;br /&gt;
      ÷3&amp;lt;_pom/&amp;gt;&lt;br /&gt;
0.3333333333333333&amp;lt;_pom/&amp;gt;5.6&amp;lt;_E/&amp;gt;¯17&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
indicates that the number &amp;lt;apll&amp;gt;÷3&amp;lt;_pom/&amp;gt;&amp;lt;/apll&amp;gt; has a Midpoint of &amp;lt;apll&amp;gt;0.3333333333333333&amp;lt;/apll&amp;gt; at &amp;lt;apll&amp;gt;53&amp;lt;/apll&amp;gt;-bit precision and a Radius of &amp;lt;apll&amp;gt;5.6&amp;lt;_E/&amp;gt;¯17&amp;lt;/apll&amp;gt;.  The Midpoint is stored as a variable precision number, and the Radius is stored as a low-precision number.&lt;br /&gt;
&lt;br /&gt;
Alternatively,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
      ⎕FPC←128 ⋄ ⎕PP←40&lt;br /&gt;
      ÷3&amp;lt;_pom/&amp;gt;&lt;br /&gt;
0.333333333333333333333333333333333333332&amp;lt;_pom/&amp;gt;1.5&amp;lt;_E/&amp;gt;¯39&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
shows the corresponding value at a higher precision and correspondingly narrower Radius.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The approximate number of digits of precision for a given value of &amp;lt;apll&amp;gt;⎕FPC&amp;lt;/apll&amp;gt; is about &amp;lt;apll&amp;gt;10⍟2*⎕FPC&amp;lt;/apll&amp;gt;. The value of &amp;lt;apll&amp;gt;⎕FPC&amp;lt;/apll&amp;gt; for a given required precision is about &amp;lt;apll&amp;gt;⌈2⍟10*digits&amp;lt;/apll&amp;gt;.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The current &amp;lt;apll&amp;gt;⎕FPC&amp;lt;/apll&amp;gt; precision&lt;br /&gt;
should be sufficient to cover both the midpoint and the radius&lt;br /&gt;
of all ball numbers being used.&lt;br /&gt;
Otherwise,&lt;br /&gt;
some results might be misleading.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For example,&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;apll&amp;gt;&lt;br /&gt;
      2v*⎕fpc←128&lt;br /&gt;
3.402823669E38&lt;br /&gt;
      ⍟ ⎕← * 1±1e¯1000&lt;br /&gt;
2.718281828±1.2E¯38&lt;br /&gt;
1±7.3E¯39&lt;br /&gt;
&amp;lt;/apll&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
What happened? -- &amp;lt;apll&amp;gt;⎕FPC&amp;lt;/apll&amp;gt; was too small!&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;apll&amp;gt;&lt;br /&gt;
      2v*⎕fpc←4096&lt;br /&gt;
1.044388881E1233&lt;br /&gt;
      ⍟ ⎕← * 1±1e¯1000&lt;br /&gt;
2.718281828±2.7E¯1000&lt;br /&gt;
1±1E¯1000&lt;br /&gt;
&amp;lt;/apll&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A Ball describes a range of &#039;&#039;&#039;variable-precision floating point numbers&#039;&#039;&#039;, and so the expression &amp;lt;apll&amp;gt;23&amp;lt;_pom/&amp;gt;1&amp;lt;/apll&amp;gt; represents the set of Real numbers between &amp;lt;apll&amp;gt;22&amp;lt;/apll&amp;gt; and &amp;lt;apll&amp;gt;24&amp;lt;/apll&amp;gt;, inclusive, &#039;&#039;&#039;not&#039;&#039;&#039; the three integers &amp;lt;apll&amp;gt;22&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;23&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;24&amp;lt;/apll&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot; style=&amp;quot; background-color:lightcyan;&amp;quot;&amp;gt;In general, suffix notation on Ball Arithmetic constants should be sufficient for &#039;&#039;&#039;almost all purposes&#039;&#039;&#039;.  That is, the Radius is already correctly calculated for constants such as &amp;lt;apll&amp;gt;23&amp;lt;_pom/&amp;gt;&amp;lt;/apll&amp;gt; whose Radius is zero, and &amp;lt;apll&amp;gt;1.2&amp;lt;_pom/&amp;gt;&amp;lt;/apll&amp;gt; whose Radius at &amp;lt;apll&amp;gt;53&amp;lt;/apll&amp;gt; bits of precision is on the order of &amp;lt;apll&amp;gt;2*¯53&amp;lt;/apll&amp;gt; (because of the inexactness of the Midpoint &amp;lt;apll&amp;gt;1.2&amp;lt;/apll&amp;gt;) which displays as &amp;lt;apll&amp;gt;1.2&amp;lt;_pom/&amp;gt;2.2&amp;lt;_E/&amp;gt;¯16&amp;lt;/apll&amp;gt;.  Although the input notation supports it, the need to override the default Radius should be &#039;&#039;&#039;quite rare&#039;&#039;&#039;.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==New Functions and Operator==&lt;br /&gt;
&lt;br /&gt;
===Functions To Convert To And From Ball Arithmetic Numbers===&lt;br /&gt;
&lt;br /&gt;
A Ball Arithmetic constant number may be created through notation (as seen above).  Otherwise, a Ball Arithmetic number also may be created from its constituent parts under program control with a new primitive function &#039;&#039;&#039;Contract&#039;&#039;&#039;, and separated into its constituent parts with a new primitive function &#039;&#039;&#039;Distract&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
====Contract====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Contract&#039;&#039;&#039; is a monadic function (&amp;lt;apll&amp;gt;≤R&amp;lt;/apll&amp;gt;) whose right argument is a Real array.  It may be used to create a Ball Arithmetic number from the one- or two-elements of its Midpoint and (optional) Radius.  The Axis Operator may specify any length &amp;lt;apll&amp;gt;1&amp;lt;/apll&amp;gt; or &amp;lt;apll&amp;gt;2&amp;lt;/apll&amp;gt; coordinate along which the conversion takes place.  It converts the first element along the specified dimension to the Midpoint of the result and (if present) the second element to its Radius.  If the second element is not present (i.e., length &amp;lt;apll&amp;gt;1&amp;lt;/apll&amp;gt; coordinate), the Radius used is calculated from the precision of the Midpoint.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
      ≤23&lt;br /&gt;
23&lt;br /&gt;
      ≤1.2&lt;br /&gt;
1.2&amp;lt;_pom/&amp;gt;1.1&amp;lt;_E/&amp;gt;¯16&lt;br /&gt;
      ≤1.3 1&amp;lt;_E/&amp;gt;¯20&lt;br /&gt;
1.3&amp;lt;_pom/&amp;gt;1&amp;lt;_E/&amp;gt;¯20&lt;br /&gt;
      ≤1r2 1&amp;lt;_E/&amp;gt;¯20&lt;br /&gt;
0.5&amp;lt;_pom/&amp;gt;1&amp;lt;_E/&amp;gt;¯20&lt;br /&gt;
      ≤○1&lt;br /&gt;
3.141592653589793&amp;lt;_pom/&amp;gt;1.1&amp;lt;_E/&amp;gt;¯16 &lt;br /&gt;
      ≤(○1) 1&amp;lt;_E/&amp;gt;¯20&lt;br /&gt;
3.141592653589793&amp;lt;_pom/&amp;gt;1&amp;lt;_E/&amp;gt;¯20 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Distract====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Distract&#039;&#039;&#039; is a monadic function (&amp;lt;apll&amp;gt;≥R&amp;lt;/apll&amp;gt;) whose right argument is a Real array.  It may be used to separate out a Ball Arithmetic&#039;s Midpoint and Radius into two distinct values.  The Axis Operator may specify the place where the new length &amp;lt;apll&amp;gt;2&amp;lt;/apll&amp;gt; coordinate is to be inserted.  The pair of values along this new coordinate are the Midpoint and Radius of the corresponding number from the right argument.  If the number can be represented exactly, the Radius is zero.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
      ⎕PP←10&lt;br /&gt;
      ≥1.2&lt;br /&gt;
1.2 1.1102230246251565&amp;lt;_E/&amp;gt;¯16&lt;br /&gt;
      ≥1.2&amp;lt;_x/&amp;gt;&lt;br /&gt;
6&amp;lt;_r/&amp;gt;5 0&lt;br /&gt;
      ≥1.2&amp;lt;_v/&amp;gt;&lt;br /&gt;
1.2 1.110223024625157&amp;lt;_E/&amp;gt;¯16&lt;br /&gt;
      ≥1.2&amp;lt;_pom/&amp;gt;&lt;br /&gt;
1.2 2.220446049250313&amp;lt;_E/&amp;gt;¯16&lt;br /&gt;
      ≥1.5&lt;br /&gt;
1.5 0&lt;br /&gt;
      ≥1.5&amp;lt;_x/&amp;gt;&lt;br /&gt;
3&amp;lt;_r/&amp;gt;2 0&lt;br /&gt;
      ≥1.5&amp;lt;_v/&amp;gt;&lt;br /&gt;
1.5 1.110223024625157&amp;lt;_E/&amp;gt;¯16&lt;br /&gt;
      ≥1.5&amp;lt;_pom/&amp;gt;&lt;br /&gt;
1.5 0&lt;br /&gt;
      a←(○1&amp;lt;_pom/&amp;gt;)×⍳4&lt;br /&gt;
      a,&#039;|&#039;,≥a&lt;br /&gt;
 3.141592654&amp;lt;_pom/&amp;gt;4.4&amp;lt;_E/&amp;gt;¯16 |  3.141592654 4.440892148&amp;lt;_E/&amp;gt;¯16&lt;br /&gt;
 6.283185307&amp;lt;_pom/&amp;gt;8.9&amp;lt;_E/&amp;gt;¯16 |  6.283185307 8.881784296&amp;lt;_E/&amp;gt;¯16&lt;br /&gt;
 9.424777961&amp;lt;_pom/&amp;gt;1.3&amp;lt;_E/&amp;gt;¯15 |  9.424777961 1.332267643&amp;lt;_E/&amp;gt;¯15&lt;br /&gt;
12.56637061&amp;lt;_pom/&amp;gt;1.8&amp;lt;_E/&amp;gt;¯15  | 12.56637061  1.776356859&amp;lt;_E/&amp;gt;¯15&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These numbers can be represented exactly:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
      ≥⍳4&amp;lt;_pom/&amp;gt;&lt;br /&gt;
1 0&lt;br /&gt;
2 0&lt;br /&gt;
3 0&lt;br /&gt;
4 0&lt;br /&gt;
      ≥[2]⍳4&amp;lt;_pom/&amp;gt;&lt;br /&gt;
1 0&lt;br /&gt;
2 0&lt;br /&gt;
3 0&lt;br /&gt;
4 0&lt;br /&gt;
      ≥[1]⍳4&amp;lt;_pom/&amp;gt;&lt;br /&gt;
1 2 3 4&lt;br /&gt;
0 0 0 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Identities====&lt;br /&gt;
&lt;br /&gt;
The Contract of the Distract of a number both along the same axis, returns the same number.&amp;lt;br /&amp;gt;The Distract of the Contract of a number both along the same length two axis, returns the same number.&lt;br /&gt;
&lt;br /&gt;
===Operator To Provide Arbitrary Precision Specific Derived Functions===&lt;br /&gt;
&lt;br /&gt;
The DoubleTilde monadic operator (&amp;lt;apll&amp;gt;≈&amp;lt;/apll&amp;gt;, Alt-&#039;Q&#039; or Alt-shift-&#039;q&#039;) takes a primitive function as its left operand and produces an arbitrary-precision-specific derived function.&lt;br /&gt;
&lt;br /&gt;
This operator should be considered preliminary.&lt;br /&gt;
&lt;br /&gt;
====Conversion Between Balls and Intervals====&lt;br /&gt;
&lt;br /&gt;
At the moment, the monadic derived function is defined for two primitive functions.&lt;br /&gt;
&lt;br /&gt;
Because Ball Arithmetic has a close relationship with Interval Arithmetic, it may be desirable to convert between the two forms: Endpoint to Midpoint-Radius and its inverse.  The resulting derived function is not scalar.&lt;br /&gt;
&lt;br /&gt;
For example,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
      x←0&amp;lt;_pom/&amp;gt;∞ 1&amp;lt;_pom/&amp;gt;2&lt;br /&gt;
      ≥≈x&lt;br /&gt;
¯∞ ∞&lt;br /&gt;
¯1 3&lt;br /&gt;
      ≥[1]≈x&lt;br /&gt;
¯∞ ¯1&lt;br /&gt;
 ∞  3&lt;br /&gt;
      ≥[2]≈x&lt;br /&gt;
¯∞ ∞&lt;br /&gt;
¯1 3&lt;br /&gt;
      ≤≈≥≈x&lt;br /&gt;
0&amp;lt;_pom/&amp;gt;∞ 1&amp;lt;_pom/&amp;gt;2&lt;br /&gt;
      ≤≈≥[2]≈x&lt;br /&gt;
0&amp;lt;_pom/&amp;gt;∞ 1&amp;lt;_pom/&amp;gt;2&lt;br /&gt;
      ≤[2]≈≥≈x&lt;br /&gt;
0&amp;lt;_pom/&amp;gt;∞ 1&amp;lt;_pom/&amp;gt;2&lt;br /&gt;
      ≤[2]≈≥[2]≈x&lt;br /&gt;
0&amp;lt;_pom/&amp;gt;∞ 1&amp;lt;_pom/&amp;gt;2 &lt;br /&gt;
      ≤[1]≈≥[1]≈x&lt;br /&gt;
0&amp;lt;_pom/&amp;gt;∞ 1&amp;lt;_pom/&amp;gt;2 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The domain of these functions is limited to Real numbers.  Hypercomplex numbers signal a &amp;lt;apll&amp;gt;DOMAIN ERROR&amp;lt;/apll&amp;gt;.  To see the Endpoints of a Hypercomplex number, first &#039;&#039;&#039;Dilate&#039;&#039;&#039; it so as to separate out the coefficients and then apply &amp;lt;apll&amp;gt;≥≈&amp;lt;/apll&amp;gt; to extract the Endpoints as in &amp;lt;apll&amp;gt;≥≈&amp;amp;gt;R&amp;lt;/apll&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
For example,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;      ≥≈ 2±0i0±1&lt;br /&gt;
DOMAIN ERROR&lt;br /&gt;
      ≥≈ 2±0i0±1&lt;br /&gt;
      ∧&lt;br /&gt;
      ≥≈&amp;gt;2±0i0±1&lt;br /&gt;
 2 2&lt;br /&gt;
¯1 1&lt;br /&gt;
      &amp;lt;≤≈≥≈&amp;gt;2±0i0±1&lt;br /&gt;
2±0i0±1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Union and Intersection of Balls====&lt;br /&gt;
&lt;br /&gt;
The left operand of the DoubleTilde operator is defined for the &#039;&#039;&#039;Union&#039;&#039;&#039; and &#039;&#039;&#039;Intersection&#039;&#039;&#039; functions (&amp;lt;apll&amp;gt;∪∩&amp;lt;/apll&amp;gt;) as follows: &lt;br /&gt;
&lt;br /&gt;
Because Ball arithmetic numbers represent a range of floating point numbers, at times it is desirable to produce their Union or Intersection.&lt;br /&gt;
&lt;br /&gt;
For example,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
      x←0.5&amp;lt;pom/&amp;gt;0.5      ⍝ The interval [0,1]&lt;br /&gt;
      x∪≈x+2         ⍝ The interval [0,1] ∪ [2,3] ←→ [0,3]&lt;br /&gt;
1.5&amp;lt;pom/&amp;gt;1.5&lt;br /&gt;
      x∪≈x+1         ⍝ The interval [0,1] ∪ [1,2] ←→ [0,2]&lt;br /&gt;
1&amp;lt;pom/&amp;gt;1 &lt;br /&gt;
      x∩≈x+1         ⍝ The interval [0,1] ∩ [1,2] ←→ [1,1]&lt;br /&gt;
1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If two Balls have no points in common, the result is a NaN (&amp;lt;apll&amp;gt;∅&amp;lt;/apll&amp;gt;):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
      x∩≈x+1.1       ⍝ The interval [0,1] ∩ [1.1,2.1] ←→ ∅&lt;br /&gt;
∅&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The identity element for &amp;lt;apll&amp;gt;∩≈&amp;lt;/apll&amp;gt; is &amp;lt;apll&amp;gt;0±∞&amp;lt;/apll&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The derived functions are scalar.&lt;br /&gt;
&lt;br /&gt;
====Comparison Functions====&lt;br /&gt;
&lt;br /&gt;
The left operand of the DoubleTilde operator is defined for the six comparison functions (&amp;lt;apll&amp;gt;&amp;amp;lt;≤=≥&amp;amp;gt;≠&amp;lt;/apll&amp;gt;) as follows:&lt;br /&gt;
&lt;br /&gt;
For &amp;lt;apll&amp;gt;&amp;lt;i&amp;gt;f&amp;lt;/i&amp;gt;&amp;lt;/apll&amp;gt; as one of the above six functions, &amp;lt;apll&amp;gt;L&amp;lt;i&amp;gt;f&amp;lt;/i&amp;gt;≈R&amp;lt;/apll&amp;gt; is TRUE iff for all &amp;lt;apll&amp;gt;t∊L&amp;lt;/apll&amp;gt; and &amp;lt;apll&amp;gt;u∊R&amp;lt;/apll&amp;gt;, then &amp;lt;apll&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;t f u&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;/apll&amp;gt; is TRUE.  These comparisons are all done with &amp;lt;apll&amp;gt;⎕CT←0&amp;lt;/apll&amp;gt; because, in a sense, Ball comparisons carry their own Fuzz.&lt;br /&gt;
&lt;br /&gt;
For example,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;      (L R)←4&amp;lt;_pom/&amp;gt;1 6&amp;lt;_pom/&amp;gt;1&lt;br /&gt;
      L&amp;lt;≈R&lt;br /&gt;
0&lt;br /&gt;
      L≤≈R&lt;br /&gt;
1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The derived functions are scalar.&lt;br /&gt;
&lt;br /&gt;
====Containing Functions====&lt;br /&gt;
&lt;br /&gt;
The left operand of the DoubleTilde operator is defined for two containing functions (&amp;lt;apll&amp;gt;⊂⊃&amp;lt;/apll&amp;gt;) as follows:&lt;br /&gt;
&lt;br /&gt;
The expression &amp;lt;apll&amp;gt;L⊂≈R&amp;lt;/apll&amp;gt; is TRUE iff for all &amp;lt;apll&amp;gt;t∊L&amp;lt;/apll&amp;gt; it is TRUE that &amp;lt;apll&amp;gt;t∊R&amp;lt;/apll&amp;gt; and that the containment is strict &amp;amp;mdash; that is, none of the endpoints match.&lt;br /&gt;
&lt;br /&gt;
The expression &amp;lt;apll&amp;gt;L⊃≈R&amp;lt;/apll&amp;gt; is TRUE iff &amp;lt;apll&amp;gt;R⊂≈L&amp;lt;/apll&amp;gt; is TRUE.&lt;br /&gt;
&lt;br /&gt;
For example,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
      (L R)←6±4 6±2&lt;br /&gt;
      L⊃≈R&lt;br /&gt;
1&lt;br /&gt;
      R⊂≈L&lt;br /&gt;
1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The derived functions are scalar.&lt;br /&gt;
&lt;br /&gt;
====Positional Relationships====&lt;br /&gt;
&lt;br /&gt;
For &amp;lt;apll&amp;gt;L&amp;lt;/apll&amp;gt; and &amp;lt;apll&amp;gt;R&amp;lt;/apll&amp;gt; as finite intervals with non-zero Radii (i.e., multi-valued), here are the possible &#039;&#039;&#039;Relative Positions&#039;&#039;&#039; between the two Intervals, where &amp;lt;apll&amp;gt;L0&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;L1&amp;lt;/apll&amp;gt; and &amp;lt;apll&amp;gt;R0&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;R1&amp;lt;/apll&amp;gt; are the endpoints of &amp;lt;apll&amp;gt;L&amp;lt;/apll&amp;gt; and &amp;lt;apll&amp;gt;R&amp;lt;/apll&amp;gt;, respectively &amp;amp;mdash; &amp;lt;apll&amp;gt;(L0 L1)←≥≈L&amp;lt;/apll&amp;gt; and &amp;lt;apll&amp;gt;(R0 R1)←≥≈R&amp;lt;/apll&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; rowspacing=&amp;quot;5&amp;quot; style=&amp;quot;font-family:APL385, SImPL;&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Relative&amp;lt;br/&amp;gt;Positions&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Endpoint&amp;lt;br/&amp;gt;Relationships&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th colspan=&amp;quot;2&amp;quot;&amp;gt;Defining&amp;lt;br/&amp;gt;Expressions&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Sample Data&amp;lt;br/&amp;gt;L &amp;amp;nbsp; R&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Distinct&amp;lt;br/&amp;gt;Ball&amp;lt;br/&amp;gt;{⍺∘≈⍵}&amp;lt;/th&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;├──L──┤&amp;lt;br/&amp;gt;&amp;amp;nbsp;├──R──┤&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;L0 L1≡R0 R1&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;L=≈R&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;6&amp;lt;_pom/&amp;gt;4  6&amp;lt;_pom/&amp;gt;4&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;0&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;├──L──┤&amp;lt;br/&amp;gt;&amp;amp;nbsp;├──R─┤&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;(L0=R0)∧L1&amp;amp;gt;R1&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;6&amp;lt;_pom/&amp;gt;4  5&amp;lt;_pom/&amp;gt;3&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;1&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;├──L─┤&amp;lt;br/&amp;gt;&amp;amp;nbsp;├──R──┤&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;(L0=R0)∧L1&amp;amp;lt;R1&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;6&amp;lt;_pom/&amp;gt;4  7&amp;lt;_pom/&amp;gt;5&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;¯1&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;├──L──┤&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;├──R─┤&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;(L0&amp;amp;lt;R0)∧L1=R1&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;6&amp;lt;_pom/&amp;gt;4  7&amp;lt;_pom/&amp;gt;3&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;2&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;├──L─┤&amp;lt;br/&amp;gt;&amp;amp;nbsp;├──R──┤&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;(L0&amp;amp;gt;R0)∧L1=R1&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;6&amp;lt;_pom/&amp;gt;4  5&amp;lt;_pom/&amp;gt;5&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;¯2&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;├──L──┤&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;├─R─┤&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;(L0&amp;amp;lt;R0)∧L1&amp;amp;gt;R1&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;L⊃≈R&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;6&amp;lt;_pom/&amp;gt;4  6&amp;lt;_pom/&amp;gt;2&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;3&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;├─L─┤&amp;lt;br/&amp;gt;&amp;amp;nbsp;├──R──┤&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;(L0&amp;amp;gt;R0)∧L1&amp;amp;lt;R1&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;L⊂≈R&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;6&amp;lt;_pom/&amp;gt;4  6&amp;lt;_pom/&amp;gt;6&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;¯3&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;├──L──┤&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;├──R──┤&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;(L0&amp;amp;lt;R0)∧(L1&amp;amp;lt;R1)∧L1&amp;amp;gt;R0&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;6&amp;lt;_pom/&amp;gt;4  8&amp;lt;_pom/&amp;gt;4&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;4&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;├──L──┤&amp;lt;br/&amp;gt;&amp;amp;nbsp;├──R──┤&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;(L0&amp;amp;gt;R0)∧(L1&amp;amp;gt;R1)∧L0&amp;amp;lt;R1&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;6&amp;lt;_pom/&amp;gt;4  4&amp;lt;_pom/&amp;gt;4&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;¯4&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;├──L──┼──R──┤&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;L1=R0&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;(L≤≈R)&amp;amp;gt;L&amp;amp;lt;≈R&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;L=∀R&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;6&amp;lt;_pom/&amp;gt;4 14&amp;lt;_pom/&amp;gt;4&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;5&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;├──R──┼──L──┤&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;L0=R1&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;(L≥≈R)&amp;amp;gt;L&amp;amp;gt;≈R&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;L=∃R&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;6&amp;lt;_pom/&amp;gt;4  0&amp;lt;_pom/&amp;gt;2&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;¯5&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;├──L──┤&amp;amp;nbsp;├──R──┤&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;L1&amp;amp;lt;R0&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;L&amp;amp;lt;≈R&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;L&amp;amp;lt;∀R&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;6&amp;lt;_pom/&amp;gt;4 17&amp;lt;_pom/&amp;gt;5&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;6&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;├──R──┤&amp;amp;nbsp;├──L──┤&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;L0&amp;amp;gt;R1&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;L&amp;amp;gt;≈R&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;L&amp;amp;gt;∃R&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;6&amp;lt;_pom/&amp;gt;4  0&amp;lt;_pom/&amp;gt;1&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;¯6&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The above table can be interpreted as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;The first column lists all possible &#039;&#039;&#039;Relative Positions&#039;&#039;&#039; two finite non-zero Radii (i.e., multi-valued) Balls may assume.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;The second column lists the &#039;&#039;&#039;Endpoint Relationship&#039;&#039;&#039; that defines the corresponding &#039;&#039;&#039;Relative Position&#039;&#039;&#039;.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;The third column lists a &#039;&#039;&#039;Defining Expression&#039;&#039;&#039; using the &#039;&#039;&#039;DoubleTilde&#039;&#039;&#039; operator that is TRUE for the corresponding &#039;&#039;&#039;Relative Position&#039;&#039;&#039; and FALSE for all of the other &#039;&#039;&#039;Relative Positions&#039;&#039;&#039; in different rows.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;The fourth column lists a &#039;&#039;&#039;Defining Expression&#039;&#039;&#039; using the &#039;&#039;&#039;Always&#039;&#039;&#039; and &#039;&#039;&#039;Possibly&#039;&#039;&#039; operators [http://forum.nars2000.org/ball-arithmetic-t614.html#p1803 proposed] by David Rabenhorst.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;The fifth column contains &#039;&#039;&#039;Sample Data&#039;&#039;&#039; that defines the corresponding &#039;&#039;&#039;Relative Position&#039;&#039;&#039;.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;The sixth column gives the value of the &#039;&#039;&#039;Distinct Ball&#039;&#039;&#039; function &amp;lt;apll&amp;gt;{⍺∘≈⍵}&amp;lt;/apll&amp;gt; when executed on the &#039;&#039;&#039;Sample Data&#039;&#039;&#039;.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note the table is organized such that apart from the first row (whose &#039;&#039;&#039;Endpoint Relationship&#039;&#039;&#039; is Symmetric in &amp;lt;apll&amp;gt;L&amp;lt;/apll&amp;gt; and &amp;lt;apll&amp;gt;R&amp;lt;/apll&amp;gt;) the rows occur in six pairs where the &#039;&#039;&#039;Endpoint Relationship&#039;&#039;&#039; for each row in the pair can be obtained from the other by swapping &amp;lt;apll&amp;gt;L&amp;lt;/apll&amp;gt; and &amp;lt;apll&amp;gt;R&amp;lt;/apll&amp;gt;.  The pairs of rows are ordered roughly by the amount of overlap between the two Balls.&lt;br /&gt;
&lt;br /&gt;
As you can see, we are missing &#039;&#039;&#039;Defining Expressions&#039;&#039;&#039; for several of the &#039;&#039;&#039;Relative Positions&#039;&#039;&#039;.  I was hoping that this table would be filled in with more detail so it would serve as a measure of whether or not we had a complete set of functions/operators which could be used to tell apart all of the &#039;&#039;&#039;Relative Positions&#039;&#039;&#039; without having to resort to the &#039;&#039;&#039;Distinct Ball&#039;&#039;&#039; function &amp;lt;apll&amp;gt;{⍺∘≈⍵}&amp;lt;/apll&amp;gt; constructed explicitly for this purpose.  Please add to this table if you find a missing expression, or wish to propose whole new functions and/or operators.&lt;br /&gt;
&lt;br /&gt;
If you would like to try a &#039;&#039;&#039;Defining Expression&#039;&#039;&#039; on the &#039;&#039;&#039;Sample Data&#039;&#039;&#039;, collect the data into a &amp;lt;apll&amp;gt;13&amp;lt;/apll&amp;gt; by &amp;lt;apll&amp;gt;2&amp;lt;/apll&amp;gt; matrix, put your &#039;&#039;&#039;Defining Expression&#039;&#039;&#039; into (say) an Anonymous Function and reduce the same data matrix along the last coordinate &amp;amp;mdash; if you have a successful function, you should see a &amp;lt;apll&amp;gt;13&amp;lt;/apll&amp;gt;-element Boolean vector with a single one in it.  For example,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
      sd←6&amp;lt;_pom/&amp;gt;4,⍪6&amp;lt;_pom/&amp;gt;4 5&amp;lt;_pom/&amp;gt;3 7&amp;lt;_pom/&amp;gt;5 7&amp;lt;_pom/&amp;gt;3 5&amp;lt;_pom/&amp;gt;5 6&amp;lt;_pom/&amp;gt;2 6&amp;lt;_pom/&amp;gt;6 8&amp;lt;_pom/&amp;gt;4 4&amp;lt;_pom/&amp;gt;4 14&amp;lt;_pom/&amp;gt;4 0&amp;lt;_pom/&amp;gt;2 17&amp;lt;_pom/&amp;gt;5 0&amp;lt;_pom/&amp;gt;1&lt;br /&gt;
      {(⍺≤≈⍵)&amp;gt;⍺&amp;lt;≈⍵}/sd&lt;br /&gt;
0 0 0 0 0 0 0 0 0 1 0 0 0 &lt;br /&gt;
      {(⍺≥≈⍵)&amp;gt;⍺&amp;gt;≈⍵}/sd&lt;br /&gt;
0 0 0 0 0 0 0 0 0 0 1 0 0 &lt;br /&gt;
      {⍺&amp;lt;≈⍵}/sd&lt;br /&gt;
0 0 0 0 0 0 0 0 0 0 0 1 0 &lt;br /&gt;
      {⍺&amp;gt;≈⍵}/sd&lt;br /&gt;
0 0 0 0 0 0 0 0 0 0 0 0 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Finally, the following example shows that the &#039;&#039;&#039;Sample Data&#039;&#039;&#039; are all distinct:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
      {⍺∘≈⍵}/sd&lt;br /&gt;
0 1 ¯1 2 ¯2 3 ¯3 4 ¯4 5 ¯5 6 ¯6&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Hypercomplex Ball Arithmetic==&lt;br /&gt;
&lt;br /&gt;
Ball Arithmetic also extends to all Hypercomplex numbers (Complex, Quaternion, and Octonion) such as &amp;lt;apll&amp;gt;1.2&amp;lt;_pom/&amp;gt;&amp;lt;_i/&amp;gt;2.2&amp;lt;/apll&amp;gt; which represents a Complex Ball Arithmetic number whose &#039;&#039;&#039;Real&#039;&#039;&#039; part is &amp;lt;apll&amp;gt;1.2&amp;lt;_pom/&amp;gt;&amp;lt;/apll&amp;gt; and whose &#039;&#039;&#039;Imaginary&#039;&#039;&#039; part is &amp;lt;apll&amp;gt;2.2&amp;lt;_pom/&amp;gt;&amp;lt;/apll&amp;gt;.  Note that the display of that number (at &amp;lt;apll&amp;gt;53&amp;lt;/apll&amp;gt; bits of precision)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
      1.2&amp;lt;_pom/&amp;gt;&amp;lt;_i/&amp;gt;2.2&lt;br /&gt;
1.2&amp;lt;_pom/&amp;gt;2.2&amp;lt;_E/&amp;gt;¯16&amp;lt;_i/&amp;gt;2.2&amp;lt;_pom/&amp;gt;4.4&amp;lt;_E/&amp;gt;¯16&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
demonstrates the inexactness of both floating point coefficients.&lt;br /&gt;
&lt;br /&gt;
==Small v. Large Radii==&lt;br /&gt;
&lt;br /&gt;
Ball Arithmetic works best when given small Radii, that is, small relative to the Midpoint.  Calculations on large Radii numbers such as &amp;lt;apll&amp;gt;0&amp;lt;_i/&amp;gt;0.5&amp;lt;_pom/&amp;gt;0.5&amp;lt;/apll&amp;gt; don&#039;t always produce useful results.  For example,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
      ⎕PP←8             ⍝ To reduce fractional clutter&lt;br /&gt;
      x←0&amp;lt;_i/&amp;gt;0.5&amp;lt;_pom/&amp;gt;0.5&lt;br /&gt;
      √x&lt;br /&gt;
0.4267767&amp;lt;_pom/&amp;gt;0.57&amp;lt;_i/&amp;gt;0&amp;lt;_pom/&amp;gt;1.4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Unfortunately in this case, because the Radius is so large it overwhelms the Midpoint, as can be seen when we Square the Square Root:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
      (√x)*2&lt;br /&gt;
0.18213835&amp;lt;_pom/&amp;gt;2.8&amp;lt;_i/&amp;gt;0&amp;lt;_pom/&amp;gt;2.8&lt;br /&gt;
      x=(√x)*2&lt;br /&gt;
0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These calculations work better using smaller Radii, such as&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
      y←0&amp;lt;_i/&amp;gt;0.5&amp;lt;_pom/&amp;gt;0.5&amp;lt;_E/&amp;gt;¯30&lt;br /&gt;
      √y&lt;br /&gt;
0.5&amp;lt;_pom/&amp;gt;2.5&amp;lt;_E/&amp;gt;¯31&amp;lt;_i/&amp;gt;0.5&amp;lt;_pom/&amp;gt;7.5&amp;lt;_E/&amp;gt;¯31&lt;br /&gt;
      (√y)*2&lt;br /&gt;
0&amp;lt;_pom/&amp;gt;1&amp;lt;_E/&amp;gt;¯30&amp;lt;_i/&amp;gt;0.5&amp;lt;_pom/&amp;gt;1&amp;lt;_E/&amp;gt;¯30 &lt;br /&gt;
      y=(√y)*2&lt;br /&gt;
1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where Square Root now returns a meaningful result, and its Square returns the original value.&lt;br /&gt;
&lt;br /&gt;
==Mixed Notation==&lt;br /&gt;
&lt;br /&gt;
The notation for Ball Arithmetic may be combined with other Point Notations in many ways, such as&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
      1&amp;lt;_p/&amp;gt;1&amp;lt;_pom/&amp;gt;&lt;br /&gt;
3.141592653589793&amp;lt;_pom/&amp;gt;4.4&amp;lt;_E/&amp;gt;¯16 &lt;br /&gt;
      1&amp;lt;_x/&amp;gt;1&amp;lt;_pom/&amp;gt;&lt;br /&gt;
2.718281828459045&amp;lt;_pom/&amp;gt;4.5&amp;lt;_E/&amp;gt;¯16&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For more details about combining different forms of Point Notation, see [[Point_Notation|Point Notation]] and in particular the section on [[Point_Notation#Mixed_Notation|Mixed Notation]].&lt;br /&gt;
&lt;br /&gt;
==Implementation==&lt;br /&gt;
&lt;br /&gt;
===Datataypes===&lt;br /&gt;
&lt;br /&gt;
This feature adds four new datatypes to the language:  one each for the four Division Algebras.  Note that marking any one of the Hypercomplex coefficients as a Ball automatically marks them all as Balls.&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|Real||&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;apll&amp;gt;23&amp;lt;_pom/&amp;gt;&amp;lt;/apll&amp;gt; or &amp;lt;apll&amp;gt;1.2&amp;lt;_pom/&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Complex||&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;apll&amp;gt;23&amp;lt;_i/&amp;gt;1.2&amp;lt;_pom/&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Quaternion||&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;apll&amp;gt;23&amp;lt;_i/&amp;gt;1.2&amp;lt;_j/&amp;gt;0.5&amp;lt;_k/&amp;gt;¯3.14&amp;lt;_pom/&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Octonion||&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;apll&amp;gt;23&amp;lt;_i/&amp;gt;1.2&amp;lt;_j/&amp;gt;0.5&amp;lt;_k/&amp;gt;¯3.14&amp;lt;l/&amp;gt;¯3&amp;lt;_ij/&amp;gt;19&amp;lt;_jk/&amp;gt;¯3&amp;lt;_kl/&amp;gt;6&amp;lt;_pom/&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Primitive Functions===&lt;br /&gt;
&lt;br /&gt;
As described above, this feature adds two new monadic primitive functions &#039;&#039;&#039;Contract&#039;&#039;&#039; (&amp;lt;apll&amp;gt;≤R&amp;lt;/apll&amp;gt;) and its inverse &#039;&#039;&#039;Distract&#039;&#039;&#039; (&amp;lt;apll&amp;gt;≥R&amp;lt;/apll&amp;gt;), along with one new monadic primitive operator &#039;&#039;&#039;DoubleTilde&#039;&#039;&#039; &amp;lt;apll&amp;gt;f≈ R&amp;lt;/apll&amp;gt; and &amp;lt;apll&amp;gt;L f≈ R&amp;lt;/apll&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
All primitive and system functions and operators are extended to work with Ball Arithmetic, so you can test out this feature on all algorithms, with the exception of trying to find the Factorial of a multiple-precision/Ball Arithmetic Hypercomplex number, in which case you are temporarily out of luck.&lt;br /&gt;
&lt;br /&gt;
==Workspace Version Number==&lt;br /&gt;
&lt;br /&gt;
For the moment, if you save a workspace which contains a Ball Arithmetic number in a variable, the workspace version number is &amp;lt;apll&amp;gt;0.03&amp;lt;/apll&amp;gt;.  Otherwise, the version number is &amp;lt;apll&amp;gt;0.02&amp;lt;/apll&amp;gt;.  Workspaces with Ball Arithmetic Numbers may not be loaded by an earlier version of the interpreter.&lt;br /&gt;
&lt;br /&gt;
==Pending Design Decisions==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;The direct comparison functions (&amp;lt;apll&amp;gt;&amp;amp;lt;≤=≥&amp;amp;gt;≠≡≢&amp;lt;/apll&amp;gt;) and indirect ones (&amp;lt;apll&amp;gt;⍳⍸∊⍷⍒⍋&amp;lt;/apll&amp;gt;) are currently implemented to compare the Midpoints of the arguments ignoring the Radius &amp;amp;mdash; this may change.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;The Floor function and its related functions (Ceiling, Residue, GCD, LCM, and Encode) are currently implemented to execute on the Midpoints of the arguments ignoring the Radius &amp;amp;mdash; this may change.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;We need new primitives to describe the different ways in which Balls can intersect/overlap, possibly through a new monadic operator (perhaps &amp;amp;#x2248;) on the existing direct and indirect comparison and Floor-related functions.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Certain primitives are defined on limited ranges, and sometimes multiple ranges where it might use different algorithms for different ranges (e.g. &amp;lt;apll&amp;gt;L!R&amp;lt;/apll&amp;gt;).  There are open questions about how to handle a Ball that spans two or more of these ranges as to how to calculate the result.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Infinity and NaN have not been given any special treatment as yet.  The results are whatever ARB has chosen which we may need to override.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Download==&lt;br /&gt;
&lt;br /&gt;
This feature is available as an Alpha release &amp;amp;mdash; it may be downloaded from the [http://www.nars2000.org/download/binaries/alpha/ Alpha] release directory.&lt;br /&gt;
&lt;br /&gt;
==Acknowledgements==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;The Arb team has contributed their Ball Arithmetic&amp;lt;ref name=&amp;quot;BallArithmetic&amp;quot; /&amp;gt; code which made this feature possible.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;David Rabenhorst has contributed many very useful ideas and many hours debugging the implementation.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Drab</name></author>
	</entry>
	<entry>
		<id>https://wiki.nars2000.org/index.php?title=Ball_Arithmetic&amp;diff=3372</id>
		<title>Ball Arithmetic</title>
		<link rel="alternate" type="text/html" href="https://wiki.nars2000.org/index.php?title=Ball_Arithmetic&amp;diff=3372"/>
		<updated>2018-10-26T10:16:06Z</updated>

		<summary type="html">&lt;p&gt;Drab: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
Ball&amp;lt;ref name=&amp;quot;BallArithmetic&amp;quot;&amp;gt;NARS2000 Wiki, [http://arblib.org Ball Arithmetic]&amp;lt;/ref&amp;gt; and Interval Arithmetic&amp;lt;ref name=&amp;quot;IntervalArithmetic&amp;quot;&amp;gt;Wikipedia, [https://en.wikipedia.org/wiki/Interval_arithmetic Interval Arithmetic]&amp;lt;/ref&amp;gt; both refer to the same idea of calculating with arbitrary precision inexact numbers &amp;amp;mdash; that is, with a range of floating point values instead of a single representative.  This allows such numbers to reflect their inexactness explicitly.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;The most common use is to keep track of and handle rounding errors directly during the calculation and of uncertainties in the knowledge of the exact values of physical and technical parameters. The latter often arise from measurement errors and tolerances for components or &#039;&#039;&#039;due to limits on computational accuracy&#039;&#039;&#039;. Interval arithmetic also helps find reliable and guaranteed solutions to equations and optimization problems.&amp;quot;&amp;lt;ref name=&amp;quot;IntervalArithmetic&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The difference between the two is in how each approach represents its values:  Interval Arithmetic uses the two ends of the interval &amp;lt;apll&amp;gt;[a, b]&amp;lt;/apll&amp;gt; whereas Ball Arithmetic uses a Ball with a Midpoint and Radius.  Each has its advantages.  Interval Arithmetic is implemented by several libraries such as MPFI&amp;lt;ref name=&amp;quot;MPFI&amp;quot;&amp;gt;[http://perso.ens-lyon.fr/nathalie.revol/software.html MPFI]&amp;lt;/ref&amp;gt; and Ball Arithmetic is implemented by ARB&amp;lt;ref name=&amp;quot;BallArithmetic&amp;quot; /&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
This feature uses the ARB&amp;lt;ref name=&amp;quot;BallArithmetic&amp;quot; /&amp;gt; library to implement Ball Arithmetic.&lt;br /&gt;
&lt;br /&gt;
==Environment==&lt;br /&gt;
&lt;br /&gt;
In the examples below, unless otherwise specified, the precision of multi-precision floating-point numbers is set to &amp;lt;apll&amp;gt;53&amp;lt;/apll&amp;gt; bits via &amp;lt;apll&amp;gt;⎕FPC←53&amp;lt;/apll&amp;gt; which is the same precision as standard double-precision numbers.  The Printing Precision is set to &amp;lt;apll&amp;gt;17&amp;lt;/apll&amp;gt; digits via &amp;lt;apll&amp;gt;⎕PP←17&amp;lt;/apll&amp;gt; so as to display the maximum number of significant digits at &amp;lt;apll&amp;gt;53&amp;lt;/apll&amp;gt; bits of precision.  The Comparison Tolerance is set via &amp;lt;apll&amp;gt;⎕CT←1&amp;lt;_E/&amp;gt;¯10&amp;lt;/apll&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Calculating With Ball Arithmetic==&lt;br /&gt;
&lt;br /&gt;
If you have ever entered an expression such as&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
      ÷3&lt;br /&gt;
0.3333333333333333&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
undoubtedly, you are aware that the result is inexact.  Moreover, as you incorporate into your code the many other functions that produce inexact numbers, you should be wondering &amp;quot;How does the accumulation of inexactness affect my results?&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The answer to that question lies in the province of [https://en.wikipedia.org/wiki/Numerical_analysis Numerical Analysis] where it is described as &amp;quot;the study of algorithms that use numerical approximation&amp;quot;.  In general, applying the techniques of Numerical Analysis often involves time-consuming analysis.  Fortunately, Ball Arithmetic is an easy to use alternative to that.  That is, instead of analyzing the algorithm, run the algorithm with all calculations done with Ball Arithmetic.&lt;br /&gt;
&lt;br /&gt;
Here is the same expression in Ball Arithmetic (use Alt-‘q’ or Ctrl-‘q’, depending on your keyboard layout, to enter the &amp;lt;apll&amp;gt;&amp;lt;_pom/&amp;gt;&amp;lt;/apll&amp;gt; symbol):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
      ÷3&amp;lt;_pom/&amp;gt;&lt;br /&gt;
0.3333333333333333&amp;lt;_pom/&amp;gt;5.6&amp;lt;_E/&amp;gt;¯17&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Essentially, each Ball Arithmetic number carries with it an explicit Radius that describes the interval which contains the true value.  Because Ball Arithmetic data propagates throughout a calculation and is never demoted to a lower datatype, its advantage is that after each operation the resulting Ball reliably includes the true answer.  Across an entire algorithm, the final result is a Ball that indicates explicitly how precise it is, thus eliminating the guesswork as to the effect on the algorithm of the inexactness of the input and any other inexact constants used.&lt;br /&gt;
&lt;br /&gt;
For example,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
      sqrt←{⍺←= ⋄ {0.5×⍵+⍺÷⍵}⍣⍺⍨⍵} ⍝ Calculate square root using Newton&#039;s method&lt;br /&gt;
      √2&amp;lt;_pom/&amp;gt;&lt;br /&gt;
1.414213562373095&amp;lt;_pom/&amp;gt;2.2&amp;lt;_E/&amp;gt;¯16&lt;br /&gt;
      sqrt 2&amp;lt;_pom/&amp;gt;&lt;br /&gt;
1.414213562373095&amp;lt;_pom/&amp;gt;1.1&amp;lt;_E/&amp;gt;¯15 &lt;br /&gt;
      10 sqrt 2&amp;lt;_pom/&amp;gt;&lt;br /&gt;
1.414213562373095&amp;lt;_pom/&amp;gt;2.8&amp;lt;_E/&amp;gt;¯15 &lt;br /&gt;
      100 sqrt 2&amp;lt;_pom/&amp;gt;&lt;br /&gt;
1.414213562373095&amp;lt;_pom/&amp;gt;3.3&amp;lt;_E/&amp;gt;¯14 &lt;br /&gt;
      1000 sqrt 2&amp;lt;_pom/&amp;gt;&lt;br /&gt;
1.414213562373095&amp;lt;_pom/&amp;gt;3.3&amp;lt;_E/&amp;gt;¯13 &lt;br /&gt;
      10000 sqrt 2&amp;lt;_pom/&amp;gt;&lt;br /&gt;
1.414213562373095&amp;lt;_pom/&amp;gt;3.5&amp;lt;_E/&amp;gt;¯12&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As you can see, after a few iterations, the accuracy of the result doesn&#039;t improve.  However, because it is an iterative algorithm, the precision worsens as the number of iterations increases.  Only by using Ball Arithmetic can you see just how the precision of the result is affected.&lt;br /&gt;
&lt;br /&gt;
To demonstrate with an extreme example, consider the following function:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
      f←{⍪⍵-3√(⍵*3)-⍵*2}&lt;br /&gt;
      f 10*3×⍳5&lt;br /&gt;
0.33344450621439137&lt;br /&gt;
0.3333334452472627 &lt;br /&gt;
0.33333444595336914&lt;br /&gt;
0.3348388671875    &lt;br /&gt;
2.25&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Without knowing much about this ([https://en.wikipedia.org/wiki/Condition_number ill-conditioned]) algorithm, you have no reason to suspect these results.  As it turns out, there&#039;s a mathematical proof that as the argument increases to infinity, the algorithm converges to &amp;lt;apll&amp;gt;÷3&amp;lt;/apll&amp;gt;.  Only when you calculate with Ball Arithmetic do you see that there is a problem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
      f 10*3×⍳5&amp;lt;_pom/&amp;gt;&lt;br /&gt;
0.3334445062153009&amp;lt;_pom/&amp;gt;2.2&amp;lt;_E/&amp;gt;¯12  &lt;br /&gt;
0.3333334461785853&amp;lt;_pom/&amp;gt;4.3&amp;lt;_E/&amp;gt;¯9   &lt;br /&gt;
0.333337664604187&amp;lt;_pom/&amp;gt;0.0000062&lt;br /&gt;
0.3385009765625&amp;lt;_pom/&amp;gt;0.0085&lt;br /&gt;
1.25&amp;lt;_pom/&amp;gt;5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As you can see, the precision worsens quickly to the point where the result is meaningless.  The last line even says that the answer lies somewhere between &amp;lt;apll&amp;gt;¯3.75&amp;lt;/apll&amp;gt; and &amp;lt;apll&amp;gt;6.25&amp;lt;/apll&amp;gt;.  In other words, that answer is so &#039;&#039;&#039;imprecise&#039;&#039;&#039; as to be &#039;&#039;&#039;inaccurate&#039;&#039;&#039;!  At higher powers of ten, the answers only worsen.&lt;br /&gt;
&lt;br /&gt;
The good news with Ball Arithmetic is that if you need greater precision, just increase the value of &amp;lt;apll&amp;gt;⎕FPC&amp;lt;/apll&amp;gt;.  For example,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
      ⎕FPC←128 ⋄ ⎕PP←40&lt;br /&gt;
      sqrt 2&amp;lt;_pom/&amp;gt;&lt;br /&gt;
1.41421356237309504880168872420969807857&amp;lt;_pom/&amp;gt;5.9&amp;lt;_E/&amp;gt;¯39&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the case of an ill-conditioned algorithm, we just push the problem off a bit, but not very far &amp;amp;mdash; the problem is that the algorithm requires infinite precision:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
      f 10*3×⍳10&amp;lt;_pom/&amp;gt;&lt;br /&gt;
0.333444506214021971364848444464298690637&amp;lt;_pom/&amp;gt;3.4&amp;lt;_E/&amp;gt;¯35&lt;br /&gt;
0.333333444444506172880658466392407138179&amp;lt;_pom/&amp;gt;1.1&amp;lt;_E/&amp;gt;¯31&lt;br /&gt;
0.333333333444444444506172839632668381652&amp;lt;_pom/&amp;gt;1.6&amp;lt;_E/&amp;gt;¯28&lt;br /&gt;
0.333333333333444444444444547458328123363&amp;lt;_pom/&amp;gt;2.2&amp;lt;_E/&amp;gt;¯25&lt;br /&gt;
0.333333333333333444444619474517508476812&amp;lt;_pom/&amp;gt;3.2&amp;lt;_E/&amp;gt;¯22&lt;br /&gt;
0.333333333333333333552432522356445687706&amp;lt;_pom/&amp;gt;1.3&amp;lt;_E/&amp;gt;¯19&lt;br /&gt;
0.333333333333333491771410805881714622956&amp;lt;_pom/&amp;gt;4.5&amp;lt;_E/&amp;gt;¯16&lt;br /&gt;
0.333333333333417414223731611855328083038&amp;lt;_pom/&amp;gt;4.5&amp;lt;_E/&amp;gt;¯13&lt;br /&gt;
0.33333333363771089352667331695556640625&amp;lt;_pom/&amp;gt;4.5&amp;lt;_E/&amp;gt;¯10 &lt;br /&gt;
0.3333334587514400482177734375&amp;lt;_pom/&amp;gt;2.6&amp;lt;_E/&amp;gt;¯7&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
While your floating point code might not be so ill-conditioned, the only way to be sure of its results is one of&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Hire a Numerical Analyst&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Become a Numerical Analyst&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Use Ball Arithmetic&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Ball Arithmetic Numbers==&lt;br /&gt;
&lt;br /&gt;
A Ball Arithmetic number consist of two parts:  a Midpoint and Radius.  The Midpoint value represents the middle of the Ball and the Radius represents the distance around the Ball of possible values.  There is no way to tell which value in the Ball is the correct answer &amp;amp;mdash; you should assume that all values are potential candidates.  &lt;br /&gt;
&lt;br /&gt;
The precision at which the Midpoint and Radius are stored depends upon the current value of &amp;lt;apll&amp;gt;⎕FPC&amp;lt;/apll&amp;gt;.  For example, the following display&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
      ⎕FPC←53&lt;br /&gt;
      ÷3&amp;lt;_pom/&amp;gt;&lt;br /&gt;
0.3333333333333333&amp;lt;_pom/&amp;gt;5.6&amp;lt;_E/&amp;gt;¯17&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
indicates that the number &amp;lt;apll&amp;gt;÷3&amp;lt;_pom/&amp;gt;&amp;lt;/apll&amp;gt; has a Midpoint of &amp;lt;apll&amp;gt;0.3333333333333333&amp;lt;/apll&amp;gt; at &amp;lt;apll&amp;gt;53&amp;lt;/apll&amp;gt;-bit precision and a Radius of &amp;lt;apll&amp;gt;5.6&amp;lt;_E/&amp;gt;¯17&amp;lt;/apll&amp;gt;.  The Midpoint is stored as a variable precision number, and the Radius is stored as a low-precision number.&lt;br /&gt;
&lt;br /&gt;
Alternatively,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
      ⎕FPC←128 ⋄ ⎕PP←40&lt;br /&gt;
      ÷3&amp;lt;_pom/&amp;gt;&lt;br /&gt;
0.333333333333333333333333333333333333332&amp;lt;_pom/&amp;gt;1.5&amp;lt;_E/&amp;gt;¯39&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
shows the corresponding value at a higher precision and correspondingly narrower Radius.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The approximate number of digits of precision for a given value of &amp;lt;apll&amp;gt;⎕FPC&amp;lt;/apll&amp;gt; is about &amp;lt;apll&amp;gt;10⍟2*⎕FPC&amp;lt;/apll&amp;gt;. The value of &amp;lt;apll&amp;gt;⎕FPC&amp;lt;/apll&amp;gt; for a given required precision is about &amp;lt;apll&amp;gt;⌈2⍟10*digits&amp;lt;/apll&amp;gt;.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The current &amp;lt;apll&amp;gt;⎕FPC&amp;lt;/apll&amp;gt; precision&lt;br /&gt;
should be sufficient to cover both the midpoint and the radius&lt;br /&gt;
of all ball numbers being used.&lt;br /&gt;
Otherwise,&lt;br /&gt;
some results might be misleading.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For example,&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;apll&amp;gt;&lt;br /&gt;
      2v*⎕fpc←128&lt;br /&gt;
3.402823669E38&lt;br /&gt;
      ⍟ ⎕← * 1±1e¯1000&lt;br /&gt;
2.718281828±1.2E¯38&lt;br /&gt;
1±7.3E¯39&lt;br /&gt;
&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
What happened? -- &amp;lt;apll&amp;gt;⎕FPC&amp;lt;/apll&amp;gt; was too small!&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&lt;br /&gt;
      2v*⎕fpc←4096&lt;br /&gt;
1.044388881E1233&lt;br /&gt;
      ⍟ ⎕← * 1±1e¯1000&lt;br /&gt;
2.718281828±2.7E¯1000&lt;br /&gt;
1±1E¯1000&lt;br /&gt;
&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A Ball describes a range of &#039;&#039;&#039;variable-precision floating point numbers&#039;&#039;&#039;, and so the expression &amp;lt;apll&amp;gt;23&amp;lt;_pom/&amp;gt;1&amp;lt;/apll&amp;gt; represents the set of Real numbers between &amp;lt;apll&amp;gt;22&amp;lt;/apll&amp;gt; and &amp;lt;apll&amp;gt;24&amp;lt;/apll&amp;gt;, inclusive, &#039;&#039;&#039;not&#039;&#039;&#039; the three integers &amp;lt;apll&amp;gt;22&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;23&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;24&amp;lt;/apll&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot; style=&amp;quot; background-color:lightcyan;&amp;quot;&amp;gt;In general, suffix notation on Ball Arithmetic constants should be sufficient for &#039;&#039;&#039;almost all purposes&#039;&#039;&#039;.  That is, the Radius is already correctly calculated for constants such as &amp;lt;apll&amp;gt;23&amp;lt;_pom/&amp;gt;&amp;lt;/apll&amp;gt; whose Radius is zero, and &amp;lt;apll&amp;gt;1.2&amp;lt;_pom/&amp;gt;&amp;lt;/apll&amp;gt; whose Radius at &amp;lt;apll&amp;gt;53&amp;lt;/apll&amp;gt; bits of precision is on the order of &amp;lt;apll&amp;gt;2*¯53&amp;lt;/apll&amp;gt; (because of the inexactness of the Midpoint &amp;lt;apll&amp;gt;1.2&amp;lt;/apll&amp;gt;) which displays as &amp;lt;apll&amp;gt;1.2&amp;lt;_pom/&amp;gt;2.2&amp;lt;_E/&amp;gt;¯16&amp;lt;/apll&amp;gt;.  Although the input notation supports it, the need to override the default Radius should be &#039;&#039;&#039;quite rare&#039;&#039;&#039;.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==New Functions and Operator==&lt;br /&gt;
&lt;br /&gt;
===Functions To Convert To And From Ball Arithmetic Numbers===&lt;br /&gt;
&lt;br /&gt;
A Ball Arithmetic constant number may be created through notation (as seen above).  Otherwise, a Ball Arithmetic number also may be created from its constituent parts under program control with a new primitive function &#039;&#039;&#039;Contract&#039;&#039;&#039;, and separated into its constituent parts with a new primitive function &#039;&#039;&#039;Distract&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
====Contract====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Contract&#039;&#039;&#039; is a monadic function (&amp;lt;apll&amp;gt;≤R&amp;lt;/apll&amp;gt;) whose right argument is a Real array.  It may be used to create a Ball Arithmetic number from the one- or two-elements of its Midpoint and (optional) Radius.  The Axis Operator may specify any length &amp;lt;apll&amp;gt;1&amp;lt;/apll&amp;gt; or &amp;lt;apll&amp;gt;2&amp;lt;/apll&amp;gt; coordinate along which the conversion takes place.  It converts the first element along the specified dimension to the Midpoint of the result and (if present) the second element to its Radius.  If the second element is not present (i.e., length &amp;lt;apll&amp;gt;1&amp;lt;/apll&amp;gt; coordinate), the Radius used is calculated from the precision of the Midpoint.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
      ≤23&lt;br /&gt;
23&lt;br /&gt;
      ≤1.2&lt;br /&gt;
1.2&amp;lt;_pom/&amp;gt;1.1&amp;lt;_E/&amp;gt;¯16&lt;br /&gt;
      ≤1.3 1&amp;lt;_E/&amp;gt;¯20&lt;br /&gt;
1.3&amp;lt;_pom/&amp;gt;1&amp;lt;_E/&amp;gt;¯20&lt;br /&gt;
      ≤1r2 1&amp;lt;_E/&amp;gt;¯20&lt;br /&gt;
0.5&amp;lt;_pom/&amp;gt;1&amp;lt;_E/&amp;gt;¯20&lt;br /&gt;
      ≤○1&lt;br /&gt;
3.141592653589793&amp;lt;_pom/&amp;gt;1.1&amp;lt;_E/&amp;gt;¯16 &lt;br /&gt;
      ≤(○1) 1&amp;lt;_E/&amp;gt;¯20&lt;br /&gt;
3.141592653589793&amp;lt;_pom/&amp;gt;1&amp;lt;_E/&amp;gt;¯20 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Distract====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Distract&#039;&#039;&#039; is a monadic function (&amp;lt;apll&amp;gt;≥R&amp;lt;/apll&amp;gt;) whose right argument is a Real array.  It may be used to separate out a Ball Arithmetic&#039;s Midpoint and Radius into two distinct values.  The Axis Operator may specify the place where the new length &amp;lt;apll&amp;gt;2&amp;lt;/apll&amp;gt; coordinate is to be inserted.  The pair of values along this new coordinate are the Midpoint and Radius of the corresponding number from the right argument.  If the number can be represented exactly, the Radius is zero.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
      ⎕PP←10&lt;br /&gt;
      ≥1.2&lt;br /&gt;
1.2 1.1102230246251565&amp;lt;_E/&amp;gt;¯16&lt;br /&gt;
      ≥1.2&amp;lt;_x/&amp;gt;&lt;br /&gt;
6&amp;lt;_r/&amp;gt;5 0&lt;br /&gt;
      ≥1.2&amp;lt;_v/&amp;gt;&lt;br /&gt;
1.2 1.110223024625157&amp;lt;_E/&amp;gt;¯16&lt;br /&gt;
      ≥1.2&amp;lt;_pom/&amp;gt;&lt;br /&gt;
1.2 2.220446049250313&amp;lt;_E/&amp;gt;¯16&lt;br /&gt;
      ≥1.5&lt;br /&gt;
1.5 0&lt;br /&gt;
      ≥1.5&amp;lt;_x/&amp;gt;&lt;br /&gt;
3&amp;lt;_r/&amp;gt;2 0&lt;br /&gt;
      ≥1.5&amp;lt;_v/&amp;gt;&lt;br /&gt;
1.5 1.110223024625157&amp;lt;_E/&amp;gt;¯16&lt;br /&gt;
      ≥1.5&amp;lt;_pom/&amp;gt;&lt;br /&gt;
1.5 0&lt;br /&gt;
      a←(○1&amp;lt;_pom/&amp;gt;)×⍳4&lt;br /&gt;
      a,&#039;|&#039;,≥a&lt;br /&gt;
 3.141592654&amp;lt;_pom/&amp;gt;4.4&amp;lt;_E/&amp;gt;¯16 |  3.141592654 4.440892148&amp;lt;_E/&amp;gt;¯16&lt;br /&gt;
 6.283185307&amp;lt;_pom/&amp;gt;8.9&amp;lt;_E/&amp;gt;¯16 |  6.283185307 8.881784296&amp;lt;_E/&amp;gt;¯16&lt;br /&gt;
 9.424777961&amp;lt;_pom/&amp;gt;1.3&amp;lt;_E/&amp;gt;¯15 |  9.424777961 1.332267643&amp;lt;_E/&amp;gt;¯15&lt;br /&gt;
12.56637061&amp;lt;_pom/&amp;gt;1.8&amp;lt;_E/&amp;gt;¯15  | 12.56637061  1.776356859&amp;lt;_E/&amp;gt;¯15&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These numbers can be represented exactly:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
      ≥⍳4&amp;lt;_pom/&amp;gt;&lt;br /&gt;
1 0&lt;br /&gt;
2 0&lt;br /&gt;
3 0&lt;br /&gt;
4 0&lt;br /&gt;
      ≥[2]⍳4&amp;lt;_pom/&amp;gt;&lt;br /&gt;
1 0&lt;br /&gt;
2 0&lt;br /&gt;
3 0&lt;br /&gt;
4 0&lt;br /&gt;
      ≥[1]⍳4&amp;lt;_pom/&amp;gt;&lt;br /&gt;
1 2 3 4&lt;br /&gt;
0 0 0 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Identities====&lt;br /&gt;
&lt;br /&gt;
The Contract of the Distract of a number both along the same axis, returns the same number.&amp;lt;br /&amp;gt;The Distract of the Contract of a number both along the same length two axis, returns the same number.&lt;br /&gt;
&lt;br /&gt;
===Operator To Provide Arbitrary Precision Specific Derived Functions===&lt;br /&gt;
&lt;br /&gt;
The DoubleTilde monadic operator (&amp;lt;apll&amp;gt;≈&amp;lt;/apll&amp;gt;, Alt-&#039;Q&#039; or Alt-shift-&#039;q&#039;) takes a primitive function as its left operand and produces an arbitrary-precision-specific derived function.&lt;br /&gt;
&lt;br /&gt;
This operator should be considered preliminary.&lt;br /&gt;
&lt;br /&gt;
====Conversion Between Balls and Intervals====&lt;br /&gt;
&lt;br /&gt;
At the moment, the monadic derived function is defined for two primitive functions.&lt;br /&gt;
&lt;br /&gt;
Because Ball Arithmetic has a close relationship with Interval Arithmetic, it may be desirable to convert between the two forms: Endpoint to Midpoint-Radius and its inverse.  The resulting derived function is not scalar.&lt;br /&gt;
&lt;br /&gt;
For example,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
      x←0&amp;lt;_pom/&amp;gt;∞ 1&amp;lt;_pom/&amp;gt;2&lt;br /&gt;
      ≥≈x&lt;br /&gt;
¯∞ ∞&lt;br /&gt;
¯1 3&lt;br /&gt;
      ≥[1]≈x&lt;br /&gt;
¯∞ ¯1&lt;br /&gt;
 ∞  3&lt;br /&gt;
      ≥[2]≈x&lt;br /&gt;
¯∞ ∞&lt;br /&gt;
¯1 3&lt;br /&gt;
      ≤≈≥≈x&lt;br /&gt;
0&amp;lt;_pom/&amp;gt;∞ 1&amp;lt;_pom/&amp;gt;2&lt;br /&gt;
      ≤≈≥[2]≈x&lt;br /&gt;
0&amp;lt;_pom/&amp;gt;∞ 1&amp;lt;_pom/&amp;gt;2&lt;br /&gt;
      ≤[2]≈≥≈x&lt;br /&gt;
0&amp;lt;_pom/&amp;gt;∞ 1&amp;lt;_pom/&amp;gt;2&lt;br /&gt;
      ≤[2]≈≥[2]≈x&lt;br /&gt;
0&amp;lt;_pom/&amp;gt;∞ 1&amp;lt;_pom/&amp;gt;2 &lt;br /&gt;
      ≤[1]≈≥[1]≈x&lt;br /&gt;
0&amp;lt;_pom/&amp;gt;∞ 1&amp;lt;_pom/&amp;gt;2 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The domain of these functions is limited to Real numbers.  Hypercomplex numbers signal a &amp;lt;apll&amp;gt;DOMAIN ERROR&amp;lt;/apll&amp;gt;.  To see the Endpoints of a Hypercomplex number, first &#039;&#039;&#039;Dilate&#039;&#039;&#039; it so as to separate out the coefficients and then apply &amp;lt;apll&amp;gt;≥≈&amp;lt;/apll&amp;gt; to extract the Endpoints as in &amp;lt;apll&amp;gt;≥≈&amp;amp;gt;R&amp;lt;/apll&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
For example,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;      ≥≈ 2±0i0±1&lt;br /&gt;
DOMAIN ERROR&lt;br /&gt;
      ≥≈ 2±0i0±1&lt;br /&gt;
      ∧&lt;br /&gt;
      ≥≈&amp;gt;2±0i0±1&lt;br /&gt;
 2 2&lt;br /&gt;
¯1 1&lt;br /&gt;
      &amp;lt;≤≈≥≈&amp;gt;2±0i0±1&lt;br /&gt;
2±0i0±1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Union and Intersection of Balls====&lt;br /&gt;
&lt;br /&gt;
The left operand of the DoubleTilde operator is defined for the &#039;&#039;&#039;Union&#039;&#039;&#039; and &#039;&#039;&#039;Intersection&#039;&#039;&#039; functions (&amp;lt;apll&amp;gt;∪∩&amp;lt;/apll&amp;gt;) as follows: &lt;br /&gt;
&lt;br /&gt;
Because Ball arithmetic numbers represent a range of floating point numbers, at times it is desirable to produce their Union or Intersection.&lt;br /&gt;
&lt;br /&gt;
For example,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
      x←0.5&amp;lt;pom/&amp;gt;0.5      ⍝ The interval [0,1]&lt;br /&gt;
      x∪≈x+2         ⍝ The interval [0,1] ∪ [2,3] ←→ [0,3]&lt;br /&gt;
1.5&amp;lt;pom/&amp;gt;1.5&lt;br /&gt;
      x∪≈x+1         ⍝ The interval [0,1] ∪ [1,2] ←→ [0,2]&lt;br /&gt;
1&amp;lt;pom/&amp;gt;1 &lt;br /&gt;
      x∩≈x+1         ⍝ The interval [0,1] ∩ [1,2] ←→ [1,1]&lt;br /&gt;
1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If two Balls have no points in common, the result is a NaN (&amp;lt;apll&amp;gt;∅&amp;lt;/apll&amp;gt;):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
      x∩≈x+1.1       ⍝ The interval [0,1] ∩ [1.1,2.1] ←→ ∅&lt;br /&gt;
∅&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The identity element for &amp;lt;apll&amp;gt;∩≈&amp;lt;/apll&amp;gt; is &amp;lt;apll&amp;gt;0±∞&amp;lt;/apll&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The derived functions are scalar.&lt;br /&gt;
&lt;br /&gt;
====Comparison Functions====&lt;br /&gt;
&lt;br /&gt;
The left operand of the DoubleTilde operator is defined for the six comparison functions (&amp;lt;apll&amp;gt;&amp;amp;lt;≤=≥&amp;amp;gt;≠&amp;lt;/apll&amp;gt;) as follows:&lt;br /&gt;
&lt;br /&gt;
For &amp;lt;apll&amp;gt;&amp;lt;i&amp;gt;f&amp;lt;/i&amp;gt;&amp;lt;/apll&amp;gt; as one of the above six functions, &amp;lt;apll&amp;gt;L&amp;lt;i&amp;gt;f&amp;lt;/i&amp;gt;≈R&amp;lt;/apll&amp;gt; is TRUE iff for all &amp;lt;apll&amp;gt;t∊L&amp;lt;/apll&amp;gt; and &amp;lt;apll&amp;gt;u∊R&amp;lt;/apll&amp;gt;, then &amp;lt;apll&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;t f u&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;/apll&amp;gt; is TRUE.  These comparisons are all done with &amp;lt;apll&amp;gt;⎕CT←0&amp;lt;/apll&amp;gt; because, in a sense, Ball comparisons carry their own Fuzz.&lt;br /&gt;
&lt;br /&gt;
For example,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;      (L R)←4&amp;lt;_pom/&amp;gt;1 6&amp;lt;_pom/&amp;gt;1&lt;br /&gt;
      L&amp;lt;≈R&lt;br /&gt;
0&lt;br /&gt;
      L≤≈R&lt;br /&gt;
1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The derived functions are scalar.&lt;br /&gt;
&lt;br /&gt;
====Containing Functions====&lt;br /&gt;
&lt;br /&gt;
The left operand of the DoubleTilde operator is defined for two containing functions (&amp;lt;apll&amp;gt;⊂⊃&amp;lt;/apll&amp;gt;) as follows:&lt;br /&gt;
&lt;br /&gt;
The expression &amp;lt;apll&amp;gt;L⊂≈R&amp;lt;/apll&amp;gt; is TRUE iff for all &amp;lt;apll&amp;gt;t∊L&amp;lt;/apll&amp;gt; it is TRUE that &amp;lt;apll&amp;gt;t∊R&amp;lt;/apll&amp;gt; and that the containment is strict &amp;amp;mdash; that is, none of the endpoints match.&lt;br /&gt;
&lt;br /&gt;
The expression &amp;lt;apll&amp;gt;L⊃≈R&amp;lt;/apll&amp;gt; is TRUE iff &amp;lt;apll&amp;gt;R⊂≈L&amp;lt;/apll&amp;gt; is TRUE.&lt;br /&gt;
&lt;br /&gt;
For example,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
      (L R)←6±4 6±2&lt;br /&gt;
      L⊃≈R&lt;br /&gt;
1&lt;br /&gt;
      R⊂≈L&lt;br /&gt;
1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The derived functions are scalar.&lt;br /&gt;
&lt;br /&gt;
====Positional Relationships====&lt;br /&gt;
&lt;br /&gt;
For &amp;lt;apll&amp;gt;L&amp;lt;/apll&amp;gt; and &amp;lt;apll&amp;gt;R&amp;lt;/apll&amp;gt; as finite intervals with non-zero Radii (i.e., multi-valued), here are the possible &#039;&#039;&#039;Relative Positions&#039;&#039;&#039; between the two Intervals, where &amp;lt;apll&amp;gt;L0&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;L1&amp;lt;/apll&amp;gt; and &amp;lt;apll&amp;gt;R0&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;R1&amp;lt;/apll&amp;gt; are the endpoints of &amp;lt;apll&amp;gt;L&amp;lt;/apll&amp;gt; and &amp;lt;apll&amp;gt;R&amp;lt;/apll&amp;gt;, respectively &amp;amp;mdash; &amp;lt;apll&amp;gt;(L0 L1)←≥≈L&amp;lt;/apll&amp;gt; and &amp;lt;apll&amp;gt;(R0 R1)←≥≈R&amp;lt;/apll&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; rowspacing=&amp;quot;5&amp;quot; style=&amp;quot;font-family:APL385, SImPL;&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Relative&amp;lt;br/&amp;gt;Positions&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Endpoint&amp;lt;br/&amp;gt;Relationships&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th colspan=&amp;quot;2&amp;quot;&amp;gt;Defining&amp;lt;br/&amp;gt;Expressions&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Sample Data&amp;lt;br/&amp;gt;L &amp;amp;nbsp; R&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Distinct&amp;lt;br/&amp;gt;Ball&amp;lt;br/&amp;gt;{⍺∘≈⍵}&amp;lt;/th&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;├──L──┤&amp;lt;br/&amp;gt;&amp;amp;nbsp;├──R──┤&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;L0 L1≡R0 R1&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;L=≈R&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;6&amp;lt;_pom/&amp;gt;4  6&amp;lt;_pom/&amp;gt;4&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;0&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;├──L──┤&amp;lt;br/&amp;gt;&amp;amp;nbsp;├──R─┤&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;(L0=R0)∧L1&amp;amp;gt;R1&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;6&amp;lt;_pom/&amp;gt;4  5&amp;lt;_pom/&amp;gt;3&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;1&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;├──L─┤&amp;lt;br/&amp;gt;&amp;amp;nbsp;├──R──┤&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;(L0=R0)∧L1&amp;amp;lt;R1&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;6&amp;lt;_pom/&amp;gt;4  7&amp;lt;_pom/&amp;gt;5&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;¯1&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;├──L──┤&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;├──R─┤&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;(L0&amp;amp;lt;R0)∧L1=R1&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;6&amp;lt;_pom/&amp;gt;4  7&amp;lt;_pom/&amp;gt;3&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;2&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;├──L─┤&amp;lt;br/&amp;gt;&amp;amp;nbsp;├──R──┤&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;(L0&amp;amp;gt;R0)∧L1=R1&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;6&amp;lt;_pom/&amp;gt;4  5&amp;lt;_pom/&amp;gt;5&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;¯2&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;├──L──┤&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;├─R─┤&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;(L0&amp;amp;lt;R0)∧L1&amp;amp;gt;R1&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;L⊃≈R&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;6&amp;lt;_pom/&amp;gt;4  6&amp;lt;_pom/&amp;gt;2&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;3&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;├─L─┤&amp;lt;br/&amp;gt;&amp;amp;nbsp;├──R──┤&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;(L0&amp;amp;gt;R0)∧L1&amp;amp;lt;R1&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;L⊂≈R&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;6&amp;lt;_pom/&amp;gt;4  6&amp;lt;_pom/&amp;gt;6&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;¯3&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;├──L──┤&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;├──R──┤&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;(L0&amp;amp;lt;R0)∧(L1&amp;amp;lt;R1)∧L1&amp;amp;gt;R0&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;6&amp;lt;_pom/&amp;gt;4  8&amp;lt;_pom/&amp;gt;4&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;4&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;├──L──┤&amp;lt;br/&amp;gt;&amp;amp;nbsp;├──R──┤&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;(L0&amp;amp;gt;R0)∧(L1&amp;amp;gt;R1)∧L0&amp;amp;lt;R1&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;6&amp;lt;_pom/&amp;gt;4  4&amp;lt;_pom/&amp;gt;4&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;¯4&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;├──L──┼──R──┤&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;L1=R0&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;(L≤≈R)&amp;amp;gt;L&amp;amp;lt;≈R&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;L=∀R&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;6&amp;lt;_pom/&amp;gt;4 14&amp;lt;_pom/&amp;gt;4&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;5&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;├──R──┼──L──┤&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;L0=R1&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;(L≥≈R)&amp;amp;gt;L&amp;amp;gt;≈R&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;L=∃R&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;6&amp;lt;_pom/&amp;gt;4  0&amp;lt;_pom/&amp;gt;2&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;¯5&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;├──L──┤&amp;amp;nbsp;├──R──┤&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;L1&amp;amp;lt;R0&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;L&amp;amp;lt;≈R&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;L&amp;amp;lt;∀R&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;6&amp;lt;_pom/&amp;gt;4 17&amp;lt;_pom/&amp;gt;5&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;6&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;├──R──┤&amp;amp;nbsp;├──L──┤&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;L0&amp;amp;gt;R1&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;L&amp;amp;gt;≈R&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;L&amp;amp;gt;∃R&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;6&amp;lt;_pom/&amp;gt;4  0&amp;lt;_pom/&amp;gt;1&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;¯6&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The above table can be interpreted as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;The first column lists all possible &#039;&#039;&#039;Relative Positions&#039;&#039;&#039; two finite non-zero Radii (i.e., multi-valued) Balls may assume.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;The second column lists the &#039;&#039;&#039;Endpoint Relationship&#039;&#039;&#039; that defines the corresponding &#039;&#039;&#039;Relative Position&#039;&#039;&#039;.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;The third column lists a &#039;&#039;&#039;Defining Expression&#039;&#039;&#039; using the &#039;&#039;&#039;DoubleTilde&#039;&#039;&#039; operator that is TRUE for the corresponding &#039;&#039;&#039;Relative Position&#039;&#039;&#039; and FALSE for all of the other &#039;&#039;&#039;Relative Positions&#039;&#039;&#039; in different rows.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;The fourth column lists a &#039;&#039;&#039;Defining Expression&#039;&#039;&#039; using the &#039;&#039;&#039;Always&#039;&#039;&#039; and &#039;&#039;&#039;Possibly&#039;&#039;&#039; operators [http://forum.nars2000.org/ball-arithmetic-t614.html#p1803 proposed] by David Rabenhorst.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;The fifth column contains &#039;&#039;&#039;Sample Data&#039;&#039;&#039; that defines the corresponding &#039;&#039;&#039;Relative Position&#039;&#039;&#039;.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;The sixth column gives the value of the &#039;&#039;&#039;Distinct Ball&#039;&#039;&#039; function &amp;lt;apll&amp;gt;{⍺∘≈⍵}&amp;lt;/apll&amp;gt; when executed on the &#039;&#039;&#039;Sample Data&#039;&#039;&#039;.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note the table is organized such that apart from the first row (whose &#039;&#039;&#039;Endpoint Relationship&#039;&#039;&#039; is Symmetric in &amp;lt;apll&amp;gt;L&amp;lt;/apll&amp;gt; and &amp;lt;apll&amp;gt;R&amp;lt;/apll&amp;gt;) the rows occur in six pairs where the &#039;&#039;&#039;Endpoint Relationship&#039;&#039;&#039; for each row in the pair can be obtained from the other by swapping &amp;lt;apll&amp;gt;L&amp;lt;/apll&amp;gt; and &amp;lt;apll&amp;gt;R&amp;lt;/apll&amp;gt;.  The pairs of rows are ordered roughly by the amount of overlap between the two Balls.&lt;br /&gt;
&lt;br /&gt;
As you can see, we are missing &#039;&#039;&#039;Defining Expressions&#039;&#039;&#039; for several of the &#039;&#039;&#039;Relative Positions&#039;&#039;&#039;.  I was hoping that this table would be filled in with more detail so it would serve as a measure of whether or not we had a complete set of functions/operators which could be used to tell apart all of the &#039;&#039;&#039;Relative Positions&#039;&#039;&#039; without having to resort to the &#039;&#039;&#039;Distinct Ball&#039;&#039;&#039; function &amp;lt;apll&amp;gt;{⍺∘≈⍵}&amp;lt;/apll&amp;gt; constructed explicitly for this purpose.  Please add to this table if you find a missing expression, or wish to propose whole new functions and/or operators.&lt;br /&gt;
&lt;br /&gt;
If you would like to try a &#039;&#039;&#039;Defining Expression&#039;&#039;&#039; on the &#039;&#039;&#039;Sample Data&#039;&#039;&#039;, collect the data into a &amp;lt;apll&amp;gt;13&amp;lt;/apll&amp;gt; by &amp;lt;apll&amp;gt;2&amp;lt;/apll&amp;gt; matrix, put your &#039;&#039;&#039;Defining Expression&#039;&#039;&#039; into (say) an Anonymous Function and reduce the same data matrix along the last coordinate &amp;amp;mdash; if you have a successful function, you should see a &amp;lt;apll&amp;gt;13&amp;lt;/apll&amp;gt;-element Boolean vector with a single one in it.  For example,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
      sd←6&amp;lt;_pom/&amp;gt;4,⍪6&amp;lt;_pom/&amp;gt;4 5&amp;lt;_pom/&amp;gt;3 7&amp;lt;_pom/&amp;gt;5 7&amp;lt;_pom/&amp;gt;3 5&amp;lt;_pom/&amp;gt;5 6&amp;lt;_pom/&amp;gt;2 6&amp;lt;_pom/&amp;gt;6 8&amp;lt;_pom/&amp;gt;4 4&amp;lt;_pom/&amp;gt;4 14&amp;lt;_pom/&amp;gt;4 0&amp;lt;_pom/&amp;gt;2 17&amp;lt;_pom/&amp;gt;5 0&amp;lt;_pom/&amp;gt;1&lt;br /&gt;
      {(⍺≤≈⍵)&amp;gt;⍺&amp;lt;≈⍵}/sd&lt;br /&gt;
0 0 0 0 0 0 0 0 0 1 0 0 0 &lt;br /&gt;
      {(⍺≥≈⍵)&amp;gt;⍺&amp;gt;≈⍵}/sd&lt;br /&gt;
0 0 0 0 0 0 0 0 0 0 1 0 0 &lt;br /&gt;
      {⍺&amp;lt;≈⍵}/sd&lt;br /&gt;
0 0 0 0 0 0 0 0 0 0 0 1 0 &lt;br /&gt;
      {⍺&amp;gt;≈⍵}/sd&lt;br /&gt;
0 0 0 0 0 0 0 0 0 0 0 0 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Finally, the following example shows that the &#039;&#039;&#039;Sample Data&#039;&#039;&#039; are all distinct:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
      {⍺∘≈⍵}/sd&lt;br /&gt;
0 1 ¯1 2 ¯2 3 ¯3 4 ¯4 5 ¯5 6 ¯6&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Hypercomplex Ball Arithmetic==&lt;br /&gt;
&lt;br /&gt;
Ball Arithmetic also extends to all Hypercomplex numbers (Complex, Quaternion, and Octonion) such as &amp;lt;apll&amp;gt;1.2&amp;lt;_pom/&amp;gt;&amp;lt;_i/&amp;gt;2.2&amp;lt;/apll&amp;gt; which represents a Complex Ball Arithmetic number whose &#039;&#039;&#039;Real&#039;&#039;&#039; part is &amp;lt;apll&amp;gt;1.2&amp;lt;_pom/&amp;gt;&amp;lt;/apll&amp;gt; and whose &#039;&#039;&#039;Imaginary&#039;&#039;&#039; part is &amp;lt;apll&amp;gt;2.2&amp;lt;_pom/&amp;gt;&amp;lt;/apll&amp;gt;.  Note that the display of that number (at &amp;lt;apll&amp;gt;53&amp;lt;/apll&amp;gt; bits of precision)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
      1.2&amp;lt;_pom/&amp;gt;&amp;lt;_i/&amp;gt;2.2&lt;br /&gt;
1.2&amp;lt;_pom/&amp;gt;2.2&amp;lt;_E/&amp;gt;¯16&amp;lt;_i/&amp;gt;2.2&amp;lt;_pom/&amp;gt;4.4&amp;lt;_E/&amp;gt;¯16&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
demonstrates the inexactness of both floating point coefficients.&lt;br /&gt;
&lt;br /&gt;
==Small v. Large Radii==&lt;br /&gt;
&lt;br /&gt;
Ball Arithmetic works best when given small Radii, that is, small relative to the Midpoint.  Calculations on large Radii numbers such as &amp;lt;apll&amp;gt;0&amp;lt;_i/&amp;gt;0.5&amp;lt;_pom/&amp;gt;0.5&amp;lt;/apll&amp;gt; don&#039;t always produce useful results.  For example,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
      ⎕PP←8             ⍝ To reduce fractional clutter&lt;br /&gt;
      x←0&amp;lt;_i/&amp;gt;0.5&amp;lt;_pom/&amp;gt;0.5&lt;br /&gt;
      √x&lt;br /&gt;
0.4267767&amp;lt;_pom/&amp;gt;0.57&amp;lt;_i/&amp;gt;0&amp;lt;_pom/&amp;gt;1.4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Unfortunately in this case, because the Radius is so large it overwhelms the Midpoint, as can be seen when we Square the Square Root:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
      (√x)*2&lt;br /&gt;
0.18213835&amp;lt;_pom/&amp;gt;2.8&amp;lt;_i/&amp;gt;0&amp;lt;_pom/&amp;gt;2.8&lt;br /&gt;
      x=(√x)*2&lt;br /&gt;
0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These calculations work better using smaller Radii, such as&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
      y←0&amp;lt;_i/&amp;gt;0.5&amp;lt;_pom/&amp;gt;0.5&amp;lt;_E/&amp;gt;¯30&lt;br /&gt;
      √y&lt;br /&gt;
0.5&amp;lt;_pom/&amp;gt;2.5&amp;lt;_E/&amp;gt;¯31&amp;lt;_i/&amp;gt;0.5&amp;lt;_pom/&amp;gt;7.5&amp;lt;_E/&amp;gt;¯31&lt;br /&gt;
      (√y)*2&lt;br /&gt;
0&amp;lt;_pom/&amp;gt;1&amp;lt;_E/&amp;gt;¯30&amp;lt;_i/&amp;gt;0.5&amp;lt;_pom/&amp;gt;1&amp;lt;_E/&amp;gt;¯30 &lt;br /&gt;
      y=(√y)*2&lt;br /&gt;
1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where Square Root now returns a meaningful result, and its Square returns the original value.&lt;br /&gt;
&lt;br /&gt;
==Mixed Notation==&lt;br /&gt;
&lt;br /&gt;
The notation for Ball Arithmetic may be combined with other Point Notations in many ways, such as&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
      1&amp;lt;_p/&amp;gt;1&amp;lt;_pom/&amp;gt;&lt;br /&gt;
3.141592653589793&amp;lt;_pom/&amp;gt;4.4&amp;lt;_E/&amp;gt;¯16 &lt;br /&gt;
      1&amp;lt;_x/&amp;gt;1&amp;lt;_pom/&amp;gt;&lt;br /&gt;
2.718281828459045&amp;lt;_pom/&amp;gt;4.5&amp;lt;_E/&amp;gt;¯16&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For more details about combining different forms of Point Notation, see [[Point_Notation|Point Notation]] and in particular the section on [[Point_Notation#Mixed_Notation|Mixed Notation]].&lt;br /&gt;
&lt;br /&gt;
==Implementation==&lt;br /&gt;
&lt;br /&gt;
===Datataypes===&lt;br /&gt;
&lt;br /&gt;
This feature adds four new datatypes to the language:  one each for the four Division Algebras.  Note that marking any one of the Hypercomplex coefficients as a Ball automatically marks them all as Balls.&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|Real||&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;apll&amp;gt;23&amp;lt;_pom/&amp;gt;&amp;lt;/apll&amp;gt; or &amp;lt;apll&amp;gt;1.2&amp;lt;_pom/&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Complex||&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;apll&amp;gt;23&amp;lt;_i/&amp;gt;1.2&amp;lt;_pom/&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Quaternion||&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;apll&amp;gt;23&amp;lt;_i/&amp;gt;1.2&amp;lt;_j/&amp;gt;0.5&amp;lt;_k/&amp;gt;¯3.14&amp;lt;_pom/&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Octonion||&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;apll&amp;gt;23&amp;lt;_i/&amp;gt;1.2&amp;lt;_j/&amp;gt;0.5&amp;lt;_k/&amp;gt;¯3.14&amp;lt;l/&amp;gt;¯3&amp;lt;_ij/&amp;gt;19&amp;lt;_jk/&amp;gt;¯3&amp;lt;_kl/&amp;gt;6&amp;lt;_pom/&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Primitive Functions===&lt;br /&gt;
&lt;br /&gt;
As described above, this feature adds two new monadic primitive functions &#039;&#039;&#039;Contract&#039;&#039;&#039; (&amp;lt;apll&amp;gt;≤R&amp;lt;/apll&amp;gt;) and its inverse &#039;&#039;&#039;Distract&#039;&#039;&#039; (&amp;lt;apll&amp;gt;≥R&amp;lt;/apll&amp;gt;), along with one new monadic primitive operator &#039;&#039;&#039;DoubleTilde&#039;&#039;&#039; &amp;lt;apll&amp;gt;f≈ R&amp;lt;/apll&amp;gt; and &amp;lt;apll&amp;gt;L f≈ R&amp;lt;/apll&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
All primitive and system functions and operators are extended to work with Ball Arithmetic, so you can test out this feature on all algorithms, with the exception of trying to find the Factorial of a multiple-precision/Ball Arithmetic Hypercomplex number, in which case you are temporarily out of luck.&lt;br /&gt;
&lt;br /&gt;
==Workspace Version Number==&lt;br /&gt;
&lt;br /&gt;
For the moment, if you save a workspace which contains a Ball Arithmetic number in a variable, the workspace version number is &amp;lt;apll&amp;gt;0.03&amp;lt;/apll&amp;gt;.  Otherwise, the version number is &amp;lt;apll&amp;gt;0.02&amp;lt;/apll&amp;gt;.  Workspaces with Ball Arithmetic Numbers may not be loaded by an earlier version of the interpreter.&lt;br /&gt;
&lt;br /&gt;
==Pending Design Decisions==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;The direct comparison functions (&amp;lt;apll&amp;gt;&amp;amp;lt;≤=≥&amp;amp;gt;≠≡≢&amp;lt;/apll&amp;gt;) and indirect ones (&amp;lt;apll&amp;gt;⍳⍸∊⍷⍒⍋&amp;lt;/apll&amp;gt;) are currently implemented to compare the Midpoints of the arguments ignoring the Radius &amp;amp;mdash; this may change.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;The Floor function and its related functions (Ceiling, Residue, GCD, LCM, and Encode) are currently implemented to execute on the Midpoints of the arguments ignoring the Radius &amp;amp;mdash; this may change.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;We need new primitives to describe the different ways in which Balls can intersect/overlap, possibly through a new monadic operator (perhaps &amp;amp;#x2248;) on the existing direct and indirect comparison and Floor-related functions.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Certain primitives are defined on limited ranges, and sometimes multiple ranges where it might use different algorithms for different ranges (e.g. &amp;lt;apll&amp;gt;L!R&amp;lt;/apll&amp;gt;).  There are open questions about how to handle a Ball that spans two or more of these ranges as to how to calculate the result.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Infinity and NaN have not been given any special treatment as yet.  The results are whatever ARB has chosen which we may need to override.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Download==&lt;br /&gt;
&lt;br /&gt;
This feature is available as an Alpha release &amp;amp;mdash; it may be downloaded from the [http://www.nars2000.org/download/binaries/alpha/ Alpha] release directory.&lt;br /&gt;
&lt;br /&gt;
==Acknowledgements==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;The Arb team has contributed their Ball Arithmetic&amp;lt;ref name=&amp;quot;BallArithmetic&amp;quot; /&amp;gt; code which made this feature possible.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;David Rabenhorst has contributed many very useful ideas and many hours debugging the implementation.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Drab</name></author>
	</entry>
	<entry>
		<id>https://wiki.nars2000.org/index.php?title=Ball_Arithmetic&amp;diff=3371</id>
		<title>Ball Arithmetic</title>
		<link rel="alternate" type="text/html" href="https://wiki.nars2000.org/index.php?title=Ball_Arithmetic&amp;diff=3371"/>
		<updated>2018-10-26T10:14:23Z</updated>

		<summary type="html">&lt;p&gt;Drab: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
Ball&amp;lt;ref name=&amp;quot;BallArithmetic&amp;quot;&amp;gt;NARS2000 Wiki, [http://arblib.org Ball Arithmetic]&amp;lt;/ref&amp;gt; and Interval Arithmetic&amp;lt;ref name=&amp;quot;IntervalArithmetic&amp;quot;&amp;gt;Wikipedia, [https://en.wikipedia.org/wiki/Interval_arithmetic Interval Arithmetic]&amp;lt;/ref&amp;gt; both refer to the same idea of calculating with arbitrary precision inexact numbers &amp;amp;mdash; that is, with a range of floating point values instead of a single representative.  This allows such numbers to reflect their inexactness explicitly.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;The most common use is to keep track of and handle rounding errors directly during the calculation and of uncertainties in the knowledge of the exact values of physical and technical parameters. The latter often arise from measurement errors and tolerances for components or &#039;&#039;&#039;due to limits on computational accuracy&#039;&#039;&#039;. Interval arithmetic also helps find reliable and guaranteed solutions to equations and optimization problems.&amp;quot;&amp;lt;ref name=&amp;quot;IntervalArithmetic&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The difference between the two is in how each approach represents its values:  Interval Arithmetic uses the two ends of the interval &amp;lt;apll&amp;gt;[a, b]&amp;lt;/apll&amp;gt; whereas Ball Arithmetic uses a Ball with a Midpoint and Radius.  Each has its advantages.  Interval Arithmetic is implemented by several libraries such as MPFI&amp;lt;ref name=&amp;quot;MPFI&amp;quot;&amp;gt;[http://perso.ens-lyon.fr/nathalie.revol/software.html MPFI]&amp;lt;/ref&amp;gt; and Ball Arithmetic is implemented by ARB&amp;lt;ref name=&amp;quot;BallArithmetic&amp;quot; /&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
This feature uses the ARB&amp;lt;ref name=&amp;quot;BallArithmetic&amp;quot; /&amp;gt; library to implement Ball Arithmetic.&lt;br /&gt;
&lt;br /&gt;
==Environment==&lt;br /&gt;
&lt;br /&gt;
In the examples below, unless otherwise specified, the precision of multi-precision floating-point numbers is set to &amp;lt;apll&amp;gt;53&amp;lt;/apll&amp;gt; bits via &amp;lt;apll&amp;gt;⎕FPC←53&amp;lt;/apll&amp;gt; which is the same precision as standard double-precision numbers.  The Printing Precision is set to &amp;lt;apll&amp;gt;17&amp;lt;/apll&amp;gt; digits via &amp;lt;apll&amp;gt;⎕PP←17&amp;lt;/apll&amp;gt; so as to display the maximum number of significant digits at &amp;lt;apll&amp;gt;53&amp;lt;/apll&amp;gt; bits of precision.  The Comparison Tolerance is set via &amp;lt;apll&amp;gt;⎕CT←1&amp;lt;_E/&amp;gt;¯10&amp;lt;/apll&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Calculating With Ball Arithmetic==&lt;br /&gt;
&lt;br /&gt;
If you have ever entered an expression such as&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
      ÷3&lt;br /&gt;
0.3333333333333333&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
undoubtedly, you are aware that the result is inexact.  Moreover, as you incorporate into your code the many other functions that produce inexact numbers, you should be wondering &amp;quot;How does the accumulation of inexactness affect my results?&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The answer to that question lies in the province of [https://en.wikipedia.org/wiki/Numerical_analysis Numerical Analysis] where it is described as &amp;quot;the study of algorithms that use numerical approximation&amp;quot;.  In general, applying the techniques of Numerical Analysis often involves time-consuming analysis.  Fortunately, Ball Arithmetic is an easy to use alternative to that.  That is, instead of analyzing the algorithm, run the algorithm with all calculations done with Ball Arithmetic.&lt;br /&gt;
&lt;br /&gt;
Here is the same expression in Ball Arithmetic (use Alt-‘q’ or Ctrl-‘q’, depending on your keyboard layout, to enter the &amp;lt;apll&amp;gt;&amp;lt;_pom/&amp;gt;&amp;lt;/apll&amp;gt; symbol):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
      ÷3&amp;lt;_pom/&amp;gt;&lt;br /&gt;
0.3333333333333333&amp;lt;_pom/&amp;gt;5.6&amp;lt;_E/&amp;gt;¯17&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Essentially, each Ball Arithmetic number carries with it an explicit Radius that describes the interval which contains the true value.  Because Ball Arithmetic data propagates throughout a calculation and is never demoted to a lower datatype, its advantage is that after each operation the resulting Ball reliably includes the true answer.  Across an entire algorithm, the final result is a Ball that indicates explicitly how precise it is, thus eliminating the guesswork as to the effect on the algorithm of the inexactness of the input and any other inexact constants used.&lt;br /&gt;
&lt;br /&gt;
For example,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
      sqrt←{⍺←= ⋄ {0.5×⍵+⍺÷⍵}⍣⍺⍨⍵} ⍝ Calculate square root using Newton&#039;s method&lt;br /&gt;
      √2&amp;lt;_pom/&amp;gt;&lt;br /&gt;
1.414213562373095&amp;lt;_pom/&amp;gt;2.2&amp;lt;_E/&amp;gt;¯16&lt;br /&gt;
      sqrt 2&amp;lt;_pom/&amp;gt;&lt;br /&gt;
1.414213562373095&amp;lt;_pom/&amp;gt;1.1&amp;lt;_E/&amp;gt;¯15 &lt;br /&gt;
      10 sqrt 2&amp;lt;_pom/&amp;gt;&lt;br /&gt;
1.414213562373095&amp;lt;_pom/&amp;gt;2.8&amp;lt;_E/&amp;gt;¯15 &lt;br /&gt;
      100 sqrt 2&amp;lt;_pom/&amp;gt;&lt;br /&gt;
1.414213562373095&amp;lt;_pom/&amp;gt;3.3&amp;lt;_E/&amp;gt;¯14 &lt;br /&gt;
      1000 sqrt 2&amp;lt;_pom/&amp;gt;&lt;br /&gt;
1.414213562373095&amp;lt;_pom/&amp;gt;3.3&amp;lt;_E/&amp;gt;¯13 &lt;br /&gt;
      10000 sqrt 2&amp;lt;_pom/&amp;gt;&lt;br /&gt;
1.414213562373095&amp;lt;_pom/&amp;gt;3.5&amp;lt;_E/&amp;gt;¯12&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As you can see, after a few iterations, the accuracy of the result doesn&#039;t improve.  However, because it is an iterative algorithm, the precision worsens as the number of iterations increases.  Only by using Ball Arithmetic can you see just how the precision of the result is affected.&lt;br /&gt;
&lt;br /&gt;
To demonstrate with an extreme example, consider the following function:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
      f←{⍪⍵-3√(⍵*3)-⍵*2}&lt;br /&gt;
      f 10*3×⍳5&lt;br /&gt;
0.33344450621439137&lt;br /&gt;
0.3333334452472627 &lt;br /&gt;
0.33333444595336914&lt;br /&gt;
0.3348388671875    &lt;br /&gt;
2.25&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Without knowing much about this ([https://en.wikipedia.org/wiki/Condition_number ill-conditioned]) algorithm, you have no reason to suspect these results.  As it turns out, there&#039;s a mathematical proof that as the argument increases to infinity, the algorithm converges to &amp;lt;apll&amp;gt;÷3&amp;lt;/apll&amp;gt;.  Only when you calculate with Ball Arithmetic do you see that there is a problem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
      f 10*3×⍳5&amp;lt;_pom/&amp;gt;&lt;br /&gt;
0.3334445062153009&amp;lt;_pom/&amp;gt;2.2&amp;lt;_E/&amp;gt;¯12  &lt;br /&gt;
0.3333334461785853&amp;lt;_pom/&amp;gt;4.3&amp;lt;_E/&amp;gt;¯9   &lt;br /&gt;
0.333337664604187&amp;lt;_pom/&amp;gt;0.0000062&lt;br /&gt;
0.3385009765625&amp;lt;_pom/&amp;gt;0.0085&lt;br /&gt;
1.25&amp;lt;_pom/&amp;gt;5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As you can see, the precision worsens quickly to the point where the result is meaningless.  The last line even says that the answer lies somewhere between &amp;lt;apll&amp;gt;¯3.75&amp;lt;/apll&amp;gt; and &amp;lt;apll&amp;gt;6.25&amp;lt;/apll&amp;gt;.  In other words, that answer is so &#039;&#039;&#039;imprecise&#039;&#039;&#039; as to be &#039;&#039;&#039;inaccurate&#039;&#039;&#039;!  At higher powers of ten, the answers only worsen.&lt;br /&gt;
&lt;br /&gt;
The good news with Ball Arithmetic is that if you need greater precision, just increase the value of &amp;lt;apll&amp;gt;⎕FPC&amp;lt;/apll&amp;gt;.  For example,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
      ⎕FPC←128 ⋄ ⎕PP←40&lt;br /&gt;
      sqrt 2&amp;lt;_pom/&amp;gt;&lt;br /&gt;
1.41421356237309504880168872420969807857&amp;lt;_pom/&amp;gt;5.9&amp;lt;_E/&amp;gt;¯39&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the case of an ill-conditioned algorithm, we just push the problem off a bit, but not very far &amp;amp;mdash; the problem is that the algorithm requires infinite precision:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
      f 10*3×⍳10&amp;lt;_pom/&amp;gt;&lt;br /&gt;
0.333444506214021971364848444464298690637&amp;lt;_pom/&amp;gt;3.4&amp;lt;_E/&amp;gt;¯35&lt;br /&gt;
0.333333444444506172880658466392407138179&amp;lt;_pom/&amp;gt;1.1&amp;lt;_E/&amp;gt;¯31&lt;br /&gt;
0.333333333444444444506172839632668381652&amp;lt;_pom/&amp;gt;1.6&amp;lt;_E/&amp;gt;¯28&lt;br /&gt;
0.333333333333444444444444547458328123363&amp;lt;_pom/&amp;gt;2.2&amp;lt;_E/&amp;gt;¯25&lt;br /&gt;
0.333333333333333444444619474517508476812&amp;lt;_pom/&amp;gt;3.2&amp;lt;_E/&amp;gt;¯22&lt;br /&gt;
0.333333333333333333552432522356445687706&amp;lt;_pom/&amp;gt;1.3&amp;lt;_E/&amp;gt;¯19&lt;br /&gt;
0.333333333333333491771410805881714622956&amp;lt;_pom/&amp;gt;4.5&amp;lt;_E/&amp;gt;¯16&lt;br /&gt;
0.333333333333417414223731611855328083038&amp;lt;_pom/&amp;gt;4.5&amp;lt;_E/&amp;gt;¯13&lt;br /&gt;
0.33333333363771089352667331695556640625&amp;lt;_pom/&amp;gt;4.5&amp;lt;_E/&amp;gt;¯10 &lt;br /&gt;
0.3333334587514400482177734375&amp;lt;_pom/&amp;gt;2.6&amp;lt;_E/&amp;gt;¯7&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
While your floating point code might not be so ill-conditioned, the only way to be sure of its results is one of&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Hire a Numerical Analyst&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Become a Numerical Analyst&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Use Ball Arithmetic&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Ball Arithmetic Numbers==&lt;br /&gt;
&lt;br /&gt;
A Ball Arithmetic number consist of two parts:  a Midpoint and Radius.  The Midpoint value represents the middle of the Ball and the Radius represents the distance around the Ball of possible values.  There is no way to tell which value in the Ball is the correct answer &amp;amp;mdash; you should assume that all values are potential candidates.  &lt;br /&gt;
&lt;br /&gt;
The precision at which the Midpoint and Radius are stored depends upon the current value of &amp;lt;apll&amp;gt;⎕FPC&amp;lt;/apll&amp;gt;.  For example, the following display&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
      ⎕FPC←53&lt;br /&gt;
      ÷3&amp;lt;_pom/&amp;gt;&lt;br /&gt;
0.3333333333333333&amp;lt;_pom/&amp;gt;5.6&amp;lt;_E/&amp;gt;¯17&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
indicates that the number &amp;lt;apll&amp;gt;÷3&amp;lt;_pom/&amp;gt;&amp;lt;/apll&amp;gt; has a Midpoint of &amp;lt;apll&amp;gt;0.3333333333333333&amp;lt;/apll&amp;gt; at &amp;lt;apll&amp;gt;53&amp;lt;/apll&amp;gt;-bit precision and a Radius of &amp;lt;apll&amp;gt;5.6&amp;lt;_E/&amp;gt;¯17&amp;lt;/apll&amp;gt;.  The Midpoint is stored as a variable precision number, and the Radius is stored as a low-precision number.&lt;br /&gt;
&lt;br /&gt;
Alternatively,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
      ⎕FPC←128 ⋄ ⎕PP←40&lt;br /&gt;
      ÷3&amp;lt;_pom/&amp;gt;&lt;br /&gt;
0.333333333333333333333333333333333333332&amp;lt;_pom/&amp;gt;1.5&amp;lt;_E/&amp;gt;¯39&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
shows the corresponding value at a higher precision and correspondingly narrower Radius.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The approximate number of digits of precision for a given value of &amp;lt;apll&amp;gt;⎕FPC&amp;lt;/apll&amp;gt; is about &amp;lt;apll&amp;gt;10⍟2*⎕FPC&amp;lt;/apll&amp;gt;. The value of &amp;lt;apll&amp;gt;⎕FPC&amp;lt;/apll&amp;gt; for a given required precision is about &amp;lt;apll&amp;gt;⌈2⍟10*digits&amp;lt;/apll&amp;gt;.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The current &amp;lt;apll&amp;gt;⎕FPC&amp;lt;/apll&amp;gt; precision&lt;br /&gt;
should be sufficient to cover both the midpoint and the radius&lt;br /&gt;
of all ball numbers being used.&lt;br /&gt;
Otherwise,&lt;br /&gt;
some results might be misleading.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For example,&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;apll&amp;gt;&lt;br /&gt;
      2v*⎕fpc←128&lt;br /&gt;
3.402823669E38&lt;br /&gt;
      ⍟ ⎕← * 1±1e¯1000&lt;br /&gt;
2.718281828±1.2E¯38&lt;br /&gt;
1±7.3E¯39&lt;br /&gt;
&amp;lt;/apll&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
What happened? -- &amp;lt;apll&amp;gt;⎕FPC&amp;lt;/apll&amp;gt; was too small!&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;apll&amp;gt;&lt;br /&gt;
      2v*⎕fpc←4096&lt;br /&gt;
1.044388881E1233&lt;br /&gt;
      ⍟ ⎕← * 1±1e¯1000&lt;br /&gt;
2.718281828±2.7E¯1000&lt;br /&gt;
1±1E¯1000&lt;br /&gt;
&amp;lt;/apll&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A Ball describes a range of &#039;&#039;&#039;variable-precision floating point numbers&#039;&#039;&#039;, and so the expression &amp;lt;apll&amp;gt;23&amp;lt;_pom/&amp;gt;1&amp;lt;/apll&amp;gt; represents the set of Real numbers between &amp;lt;apll&amp;gt;22&amp;lt;/apll&amp;gt; and &amp;lt;apll&amp;gt;24&amp;lt;/apll&amp;gt;, inclusive, &#039;&#039;&#039;not&#039;&#039;&#039; the three integers &amp;lt;apll&amp;gt;22&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;23&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;24&amp;lt;/apll&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot; style=&amp;quot; background-color:lightcyan;&amp;quot;&amp;gt;In general, suffix notation on Ball Arithmetic constants should be sufficient for &#039;&#039;&#039;almost all purposes&#039;&#039;&#039;.  That is, the Radius is already correctly calculated for constants such as &amp;lt;apll&amp;gt;23&amp;lt;_pom/&amp;gt;&amp;lt;/apll&amp;gt; whose Radius is zero, and &amp;lt;apll&amp;gt;1.2&amp;lt;_pom/&amp;gt;&amp;lt;/apll&amp;gt; whose Radius at &amp;lt;apll&amp;gt;53&amp;lt;/apll&amp;gt; bits of precision is on the order of &amp;lt;apll&amp;gt;2*¯53&amp;lt;/apll&amp;gt; (because of the inexactness of the Midpoint &amp;lt;apll&amp;gt;1.2&amp;lt;/apll&amp;gt;) which displays as &amp;lt;apll&amp;gt;1.2&amp;lt;_pom/&amp;gt;2.2&amp;lt;_E/&amp;gt;¯16&amp;lt;/apll&amp;gt;.  Although the input notation supports it, the need to override the default Radius should be &#039;&#039;&#039;quite rare&#039;&#039;&#039;.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==New Functions and Operator==&lt;br /&gt;
&lt;br /&gt;
===Functions To Convert To And From Ball Arithmetic Numbers===&lt;br /&gt;
&lt;br /&gt;
A Ball Arithmetic constant number may be created through notation (as seen above).  Otherwise, a Ball Arithmetic number also may be created from its constituent parts under program control with a new primitive function &#039;&#039;&#039;Contract&#039;&#039;&#039;, and separated into its constituent parts with a new primitive function &#039;&#039;&#039;Distract&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
====Contract====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Contract&#039;&#039;&#039; is a monadic function (&amp;lt;apll&amp;gt;≤R&amp;lt;/apll&amp;gt;) whose right argument is a Real array.  It may be used to create a Ball Arithmetic number from the one- or two-elements of its Midpoint and (optional) Radius.  The Axis Operator may specify any length &amp;lt;apll&amp;gt;1&amp;lt;/apll&amp;gt; or &amp;lt;apll&amp;gt;2&amp;lt;/apll&amp;gt; coordinate along which the conversion takes place.  It converts the first element along the specified dimension to the Midpoint of the result and (if present) the second element to its Radius.  If the second element is not present (i.e., length &amp;lt;apll&amp;gt;1&amp;lt;/apll&amp;gt; coordinate), the Radius used is calculated from the precision of the Midpoint.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
      ≤23&lt;br /&gt;
23&lt;br /&gt;
      ≤1.2&lt;br /&gt;
1.2&amp;lt;_pom/&amp;gt;1.1&amp;lt;_E/&amp;gt;¯16&lt;br /&gt;
      ≤1.3 1&amp;lt;_E/&amp;gt;¯20&lt;br /&gt;
1.3&amp;lt;_pom/&amp;gt;1&amp;lt;_E/&amp;gt;¯20&lt;br /&gt;
      ≤1r2 1&amp;lt;_E/&amp;gt;¯20&lt;br /&gt;
0.5&amp;lt;_pom/&amp;gt;1&amp;lt;_E/&amp;gt;¯20&lt;br /&gt;
      ≤○1&lt;br /&gt;
3.141592653589793&amp;lt;_pom/&amp;gt;1.1&amp;lt;_E/&amp;gt;¯16 &lt;br /&gt;
      ≤(○1) 1&amp;lt;_E/&amp;gt;¯20&lt;br /&gt;
3.141592653589793&amp;lt;_pom/&amp;gt;1&amp;lt;_E/&amp;gt;¯20 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Distract====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Distract&#039;&#039;&#039; is a monadic function (&amp;lt;apll&amp;gt;≥R&amp;lt;/apll&amp;gt;) whose right argument is a Real array.  It may be used to separate out a Ball Arithmetic&#039;s Midpoint and Radius into two distinct values.  The Axis Operator may specify the place where the new length &amp;lt;apll&amp;gt;2&amp;lt;/apll&amp;gt; coordinate is to be inserted.  The pair of values along this new coordinate are the Midpoint and Radius of the corresponding number from the right argument.  If the number can be represented exactly, the Radius is zero.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
      ⎕PP←10&lt;br /&gt;
      ≥1.2&lt;br /&gt;
1.2 1.1102230246251565&amp;lt;_E/&amp;gt;¯16&lt;br /&gt;
      ≥1.2&amp;lt;_x/&amp;gt;&lt;br /&gt;
6&amp;lt;_r/&amp;gt;5 0&lt;br /&gt;
      ≥1.2&amp;lt;_v/&amp;gt;&lt;br /&gt;
1.2 1.110223024625157&amp;lt;_E/&amp;gt;¯16&lt;br /&gt;
      ≥1.2&amp;lt;_pom/&amp;gt;&lt;br /&gt;
1.2 2.220446049250313&amp;lt;_E/&amp;gt;¯16&lt;br /&gt;
      ≥1.5&lt;br /&gt;
1.5 0&lt;br /&gt;
      ≥1.5&amp;lt;_x/&amp;gt;&lt;br /&gt;
3&amp;lt;_r/&amp;gt;2 0&lt;br /&gt;
      ≥1.5&amp;lt;_v/&amp;gt;&lt;br /&gt;
1.5 1.110223024625157&amp;lt;_E/&amp;gt;¯16&lt;br /&gt;
      ≥1.5&amp;lt;_pom/&amp;gt;&lt;br /&gt;
1.5 0&lt;br /&gt;
      a←(○1&amp;lt;_pom/&amp;gt;)×⍳4&lt;br /&gt;
      a,&#039;|&#039;,≥a&lt;br /&gt;
 3.141592654&amp;lt;_pom/&amp;gt;4.4&amp;lt;_E/&amp;gt;¯16 |  3.141592654 4.440892148&amp;lt;_E/&amp;gt;¯16&lt;br /&gt;
 6.283185307&amp;lt;_pom/&amp;gt;8.9&amp;lt;_E/&amp;gt;¯16 |  6.283185307 8.881784296&amp;lt;_E/&amp;gt;¯16&lt;br /&gt;
 9.424777961&amp;lt;_pom/&amp;gt;1.3&amp;lt;_E/&amp;gt;¯15 |  9.424777961 1.332267643&amp;lt;_E/&amp;gt;¯15&lt;br /&gt;
12.56637061&amp;lt;_pom/&amp;gt;1.8&amp;lt;_E/&amp;gt;¯15  | 12.56637061  1.776356859&amp;lt;_E/&amp;gt;¯15&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These numbers can be represented exactly:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
      ≥⍳4&amp;lt;_pom/&amp;gt;&lt;br /&gt;
1 0&lt;br /&gt;
2 0&lt;br /&gt;
3 0&lt;br /&gt;
4 0&lt;br /&gt;
      ≥[2]⍳4&amp;lt;_pom/&amp;gt;&lt;br /&gt;
1 0&lt;br /&gt;
2 0&lt;br /&gt;
3 0&lt;br /&gt;
4 0&lt;br /&gt;
      ≥[1]⍳4&amp;lt;_pom/&amp;gt;&lt;br /&gt;
1 2 3 4&lt;br /&gt;
0 0 0 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Identities====&lt;br /&gt;
&lt;br /&gt;
The Contract of the Distract of a number both along the same axis, returns the same number.&amp;lt;br /&amp;gt;The Distract of the Contract of a number both along the same length two axis, returns the same number.&lt;br /&gt;
&lt;br /&gt;
===Operator To Provide Arbitrary Precision Specific Derived Functions===&lt;br /&gt;
&lt;br /&gt;
The DoubleTilde monadic operator (&amp;lt;apll&amp;gt;≈&amp;lt;/apll&amp;gt;, Alt-&#039;Q&#039; or Alt-shift-&#039;q&#039;) takes a primitive function as its left operand and produces an arbitrary-precision-specific derived function.&lt;br /&gt;
&lt;br /&gt;
This operator should be considered preliminary.&lt;br /&gt;
&lt;br /&gt;
====Conversion Between Balls and Intervals====&lt;br /&gt;
&lt;br /&gt;
At the moment, the monadic derived function is defined for two primitive functions.&lt;br /&gt;
&lt;br /&gt;
Because Ball Arithmetic has a close relationship with Interval Arithmetic, it may be desirable to convert between the two forms: Endpoint to Midpoint-Radius and its inverse.  The resulting derived function is not scalar.&lt;br /&gt;
&lt;br /&gt;
For example,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
      x←0&amp;lt;_pom/&amp;gt;∞ 1&amp;lt;_pom/&amp;gt;2&lt;br /&gt;
      ≥≈x&lt;br /&gt;
¯∞ ∞&lt;br /&gt;
¯1 3&lt;br /&gt;
      ≥[1]≈x&lt;br /&gt;
¯∞ ¯1&lt;br /&gt;
 ∞  3&lt;br /&gt;
      ≥[2]≈x&lt;br /&gt;
¯∞ ∞&lt;br /&gt;
¯1 3&lt;br /&gt;
      ≤≈≥≈x&lt;br /&gt;
0&amp;lt;_pom/&amp;gt;∞ 1&amp;lt;_pom/&amp;gt;2&lt;br /&gt;
      ≤≈≥[2]≈x&lt;br /&gt;
0&amp;lt;_pom/&amp;gt;∞ 1&amp;lt;_pom/&amp;gt;2&lt;br /&gt;
      ≤[2]≈≥≈x&lt;br /&gt;
0&amp;lt;_pom/&amp;gt;∞ 1&amp;lt;_pom/&amp;gt;2&lt;br /&gt;
      ≤[2]≈≥[2]≈x&lt;br /&gt;
0&amp;lt;_pom/&amp;gt;∞ 1&amp;lt;_pom/&amp;gt;2 &lt;br /&gt;
      ≤[1]≈≥[1]≈x&lt;br /&gt;
0&amp;lt;_pom/&amp;gt;∞ 1&amp;lt;_pom/&amp;gt;2 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The domain of these functions is limited to Real numbers.  Hypercomplex numbers signal a &amp;lt;apll&amp;gt;DOMAIN ERROR&amp;lt;/apll&amp;gt;.  To see the Endpoints of a Hypercomplex number, first &#039;&#039;&#039;Dilate&#039;&#039;&#039; it so as to separate out the coefficients and then apply &amp;lt;apll&amp;gt;≥≈&amp;lt;/apll&amp;gt; to extract the Endpoints as in &amp;lt;apll&amp;gt;≥≈&amp;amp;gt;R&amp;lt;/apll&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
For example,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;      ≥≈ 2±0i0±1&lt;br /&gt;
DOMAIN ERROR&lt;br /&gt;
      ≥≈ 2±0i0±1&lt;br /&gt;
      ∧&lt;br /&gt;
      ≥≈&amp;gt;2±0i0±1&lt;br /&gt;
 2 2&lt;br /&gt;
¯1 1&lt;br /&gt;
      &amp;lt;≤≈≥≈&amp;gt;2±0i0±1&lt;br /&gt;
2±0i0±1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Union and Intersection of Balls====&lt;br /&gt;
&lt;br /&gt;
The left operand of the DoubleTilde operator is defined for the &#039;&#039;&#039;Union&#039;&#039;&#039; and &#039;&#039;&#039;Intersection&#039;&#039;&#039; functions (&amp;lt;apll&amp;gt;∪∩&amp;lt;/apll&amp;gt;) as follows: &lt;br /&gt;
&lt;br /&gt;
Because Ball arithmetic numbers represent a range of floating point numbers, at times it is desirable to produce their Union or Intersection.&lt;br /&gt;
&lt;br /&gt;
For example,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
      x←0.5&amp;lt;pom/&amp;gt;0.5      ⍝ The interval [0,1]&lt;br /&gt;
      x∪≈x+2         ⍝ The interval [0,1] ∪ [2,3] ←→ [0,3]&lt;br /&gt;
1.5&amp;lt;pom/&amp;gt;1.5&lt;br /&gt;
      x∪≈x+1         ⍝ The interval [0,1] ∪ [1,2] ←→ [0,2]&lt;br /&gt;
1&amp;lt;pom/&amp;gt;1 &lt;br /&gt;
      x∩≈x+1         ⍝ The interval [0,1] ∩ [1,2] ←→ [1,1]&lt;br /&gt;
1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If two Balls have no points in common, the result is a NaN (&amp;lt;apll&amp;gt;∅&amp;lt;/apll&amp;gt;):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
      x∩≈x+1.1       ⍝ The interval [0,1] ∩ [1.1,2.1] ←→ ∅&lt;br /&gt;
∅&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The identity element for &amp;lt;apll&amp;gt;∩≈&amp;lt;/apll&amp;gt; is &amp;lt;apll&amp;gt;0±∞&amp;lt;/apll&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The derived functions are scalar.&lt;br /&gt;
&lt;br /&gt;
====Comparison Functions====&lt;br /&gt;
&lt;br /&gt;
The left operand of the DoubleTilde operator is defined for the six comparison functions (&amp;lt;apll&amp;gt;&amp;amp;lt;≤=≥&amp;amp;gt;≠&amp;lt;/apll&amp;gt;) as follows:&lt;br /&gt;
&lt;br /&gt;
For &amp;lt;apll&amp;gt;&amp;lt;i&amp;gt;f&amp;lt;/i&amp;gt;&amp;lt;/apll&amp;gt; as one of the above six functions, &amp;lt;apll&amp;gt;L&amp;lt;i&amp;gt;f&amp;lt;/i&amp;gt;≈R&amp;lt;/apll&amp;gt; is TRUE iff for all &amp;lt;apll&amp;gt;t∊L&amp;lt;/apll&amp;gt; and &amp;lt;apll&amp;gt;u∊R&amp;lt;/apll&amp;gt;, then &amp;lt;apll&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;t f u&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;/apll&amp;gt; is TRUE.  These comparisons are all done with &amp;lt;apll&amp;gt;⎕CT←0&amp;lt;/apll&amp;gt; because, in a sense, Ball comparisons carry their own Fuzz.&lt;br /&gt;
&lt;br /&gt;
For example,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;      (L R)←4&amp;lt;_pom/&amp;gt;1 6&amp;lt;_pom/&amp;gt;1&lt;br /&gt;
      L&amp;lt;≈R&lt;br /&gt;
0&lt;br /&gt;
      L≤≈R&lt;br /&gt;
1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The derived functions are scalar.&lt;br /&gt;
&lt;br /&gt;
====Containing Functions====&lt;br /&gt;
&lt;br /&gt;
The left operand of the DoubleTilde operator is defined for two containing functions (&amp;lt;apll&amp;gt;⊂⊃&amp;lt;/apll&amp;gt;) as follows:&lt;br /&gt;
&lt;br /&gt;
The expression &amp;lt;apll&amp;gt;L⊂≈R&amp;lt;/apll&amp;gt; is TRUE iff for all &amp;lt;apll&amp;gt;t∊L&amp;lt;/apll&amp;gt; it is TRUE that &amp;lt;apll&amp;gt;t∊R&amp;lt;/apll&amp;gt; and that the containment is strict &amp;amp;mdash; that is, none of the endpoints match.&lt;br /&gt;
&lt;br /&gt;
The expression &amp;lt;apll&amp;gt;L⊃≈R&amp;lt;/apll&amp;gt; is TRUE iff &amp;lt;apll&amp;gt;R⊂≈L&amp;lt;/apll&amp;gt; is TRUE.&lt;br /&gt;
&lt;br /&gt;
For example,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
      (L R)←6±4 6±2&lt;br /&gt;
      L⊃≈R&lt;br /&gt;
1&lt;br /&gt;
      R⊂≈L&lt;br /&gt;
1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The derived functions are scalar.&lt;br /&gt;
&lt;br /&gt;
====Positional Relationships====&lt;br /&gt;
&lt;br /&gt;
For &amp;lt;apll&amp;gt;L&amp;lt;/apll&amp;gt; and &amp;lt;apll&amp;gt;R&amp;lt;/apll&amp;gt; as finite intervals with non-zero Radii (i.e., multi-valued), here are the possible &#039;&#039;&#039;Relative Positions&#039;&#039;&#039; between the two Intervals, where &amp;lt;apll&amp;gt;L0&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;L1&amp;lt;/apll&amp;gt; and &amp;lt;apll&amp;gt;R0&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;R1&amp;lt;/apll&amp;gt; are the endpoints of &amp;lt;apll&amp;gt;L&amp;lt;/apll&amp;gt; and &amp;lt;apll&amp;gt;R&amp;lt;/apll&amp;gt;, respectively &amp;amp;mdash; &amp;lt;apll&amp;gt;(L0 L1)←≥≈L&amp;lt;/apll&amp;gt; and &amp;lt;apll&amp;gt;(R0 R1)←≥≈R&amp;lt;/apll&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; rowspacing=&amp;quot;5&amp;quot; style=&amp;quot;font-family:APL385, SImPL;&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Relative&amp;lt;br/&amp;gt;Positions&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Endpoint&amp;lt;br/&amp;gt;Relationships&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th colspan=&amp;quot;2&amp;quot;&amp;gt;Defining&amp;lt;br/&amp;gt;Expressions&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Sample Data&amp;lt;br/&amp;gt;L &amp;amp;nbsp; R&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Distinct&amp;lt;br/&amp;gt;Ball&amp;lt;br/&amp;gt;{⍺∘≈⍵}&amp;lt;/th&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;├──L──┤&amp;lt;br/&amp;gt;&amp;amp;nbsp;├──R──┤&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;L0 L1≡R0 R1&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;L=≈R&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;6&amp;lt;_pom/&amp;gt;4  6&amp;lt;_pom/&amp;gt;4&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;0&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;├──L──┤&amp;lt;br/&amp;gt;&amp;amp;nbsp;├──R─┤&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;(L0=R0)∧L1&amp;amp;gt;R1&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;6&amp;lt;_pom/&amp;gt;4  5&amp;lt;_pom/&amp;gt;3&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;1&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;├──L─┤&amp;lt;br/&amp;gt;&amp;amp;nbsp;├──R──┤&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;(L0=R0)∧L1&amp;amp;lt;R1&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;6&amp;lt;_pom/&amp;gt;4  7&amp;lt;_pom/&amp;gt;5&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;¯1&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;├──L──┤&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;├──R─┤&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;(L0&amp;amp;lt;R0)∧L1=R1&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;6&amp;lt;_pom/&amp;gt;4  7&amp;lt;_pom/&amp;gt;3&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;2&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;├──L─┤&amp;lt;br/&amp;gt;&amp;amp;nbsp;├──R──┤&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;(L0&amp;amp;gt;R0)∧L1=R1&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;6&amp;lt;_pom/&amp;gt;4  5&amp;lt;_pom/&amp;gt;5&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;¯2&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;├──L──┤&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;├─R─┤&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;(L0&amp;amp;lt;R0)∧L1&amp;amp;gt;R1&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;L⊃≈R&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;6&amp;lt;_pom/&amp;gt;4  6&amp;lt;_pom/&amp;gt;2&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;3&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;├─L─┤&amp;lt;br/&amp;gt;&amp;amp;nbsp;├──R──┤&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;(L0&amp;amp;gt;R0)∧L1&amp;amp;lt;R1&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;L⊂≈R&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;6&amp;lt;_pom/&amp;gt;4  6&amp;lt;_pom/&amp;gt;6&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;¯3&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;├──L──┤&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;├──R──┤&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;(L0&amp;amp;lt;R0)∧(L1&amp;amp;lt;R1)∧L1&amp;amp;gt;R0&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;6&amp;lt;_pom/&amp;gt;4  8&amp;lt;_pom/&amp;gt;4&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;4&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;├──L──┤&amp;lt;br/&amp;gt;&amp;amp;nbsp;├──R──┤&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;(L0&amp;amp;gt;R0)∧(L1&amp;amp;gt;R1)∧L0&amp;amp;lt;R1&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;6&amp;lt;_pom/&amp;gt;4  4&amp;lt;_pom/&amp;gt;4&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;¯4&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;├──L──┼──R──┤&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;L1=R0&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;(L≤≈R)&amp;amp;gt;L&amp;amp;lt;≈R&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;L=∀R&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;6&amp;lt;_pom/&amp;gt;4 14&amp;lt;_pom/&amp;gt;4&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;5&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;├──R──┼──L──┤&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;L0=R1&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;(L≥≈R)&amp;amp;gt;L&amp;amp;gt;≈R&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;L=∃R&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;6&amp;lt;_pom/&amp;gt;4  0&amp;lt;_pom/&amp;gt;2&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;¯5&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;├──L──┤&amp;amp;nbsp;├──R──┤&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;L1&amp;amp;lt;R0&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;L&amp;amp;lt;≈R&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;L&amp;amp;lt;∀R&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;6&amp;lt;_pom/&amp;gt;4 17&amp;lt;_pom/&amp;gt;5&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;6&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;├──R──┤&amp;amp;nbsp;├──L──┤&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;L0&amp;amp;gt;R1&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;L&amp;amp;gt;≈R&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;L&amp;amp;gt;∃R&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;6&amp;lt;_pom/&amp;gt;4  0&amp;lt;_pom/&amp;gt;1&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;¯6&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The above table can be interpreted as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;The first column lists all possible &#039;&#039;&#039;Relative Positions&#039;&#039;&#039; two finite non-zero Radii (i.e., multi-valued) Balls may assume.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;The second column lists the &#039;&#039;&#039;Endpoint Relationship&#039;&#039;&#039; that defines the corresponding &#039;&#039;&#039;Relative Position&#039;&#039;&#039;.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;The third column lists a &#039;&#039;&#039;Defining Expression&#039;&#039;&#039; using the &#039;&#039;&#039;DoubleTilde&#039;&#039;&#039; operator that is TRUE for the corresponding &#039;&#039;&#039;Relative Position&#039;&#039;&#039; and FALSE for all of the other &#039;&#039;&#039;Relative Positions&#039;&#039;&#039; in different rows.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;The fourth column lists a &#039;&#039;&#039;Defining Expression&#039;&#039;&#039; using the &#039;&#039;&#039;Always&#039;&#039;&#039; and &#039;&#039;&#039;Possibly&#039;&#039;&#039; operators [http://forum.nars2000.org/ball-arithmetic-t614.html#p1803 proposed] by David Rabenhorst.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;The fifth column contains &#039;&#039;&#039;Sample Data&#039;&#039;&#039; that defines the corresponding &#039;&#039;&#039;Relative Position&#039;&#039;&#039;.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;The sixth column gives the value of the &#039;&#039;&#039;Distinct Ball&#039;&#039;&#039; function &amp;lt;apll&amp;gt;{⍺∘≈⍵}&amp;lt;/apll&amp;gt; when executed on the &#039;&#039;&#039;Sample Data&#039;&#039;&#039;.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note the table is organized such that apart from the first row (whose &#039;&#039;&#039;Endpoint Relationship&#039;&#039;&#039; is Symmetric in &amp;lt;apll&amp;gt;L&amp;lt;/apll&amp;gt; and &amp;lt;apll&amp;gt;R&amp;lt;/apll&amp;gt;) the rows occur in six pairs where the &#039;&#039;&#039;Endpoint Relationship&#039;&#039;&#039; for each row in the pair can be obtained from the other by swapping &amp;lt;apll&amp;gt;L&amp;lt;/apll&amp;gt; and &amp;lt;apll&amp;gt;R&amp;lt;/apll&amp;gt;.  The pairs of rows are ordered roughly by the amount of overlap between the two Balls.&lt;br /&gt;
&lt;br /&gt;
As you can see, we are missing &#039;&#039;&#039;Defining Expressions&#039;&#039;&#039; for several of the &#039;&#039;&#039;Relative Positions&#039;&#039;&#039;.  I was hoping that this table would be filled in with more detail so it would serve as a measure of whether or not we had a complete set of functions/operators which could be used to tell apart all of the &#039;&#039;&#039;Relative Positions&#039;&#039;&#039; without having to resort to the &#039;&#039;&#039;Distinct Ball&#039;&#039;&#039; function &amp;lt;apll&amp;gt;{⍺∘≈⍵}&amp;lt;/apll&amp;gt; constructed explicitly for this purpose.  Please add to this table if you find a missing expression, or wish to propose whole new functions and/or operators.&lt;br /&gt;
&lt;br /&gt;
If you would like to try a &#039;&#039;&#039;Defining Expression&#039;&#039;&#039; on the &#039;&#039;&#039;Sample Data&#039;&#039;&#039;, collect the data into a &amp;lt;apll&amp;gt;13&amp;lt;/apll&amp;gt; by &amp;lt;apll&amp;gt;2&amp;lt;/apll&amp;gt; matrix, put your &#039;&#039;&#039;Defining Expression&#039;&#039;&#039; into (say) an Anonymous Function and reduce the same data matrix along the last coordinate &amp;amp;mdash; if you have a successful function, you should see a &amp;lt;apll&amp;gt;13&amp;lt;/apll&amp;gt;-element Boolean vector with a single one in it.  For example,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
      sd←6&amp;lt;_pom/&amp;gt;4,⍪6&amp;lt;_pom/&amp;gt;4 5&amp;lt;_pom/&amp;gt;3 7&amp;lt;_pom/&amp;gt;5 7&amp;lt;_pom/&amp;gt;3 5&amp;lt;_pom/&amp;gt;5 6&amp;lt;_pom/&amp;gt;2 6&amp;lt;_pom/&amp;gt;6 8&amp;lt;_pom/&amp;gt;4 4&amp;lt;_pom/&amp;gt;4 14&amp;lt;_pom/&amp;gt;4 0&amp;lt;_pom/&amp;gt;2 17&amp;lt;_pom/&amp;gt;5 0&amp;lt;_pom/&amp;gt;1&lt;br /&gt;
      {(⍺≤≈⍵)&amp;gt;⍺&amp;lt;≈⍵}/sd&lt;br /&gt;
0 0 0 0 0 0 0 0 0 1 0 0 0 &lt;br /&gt;
      {(⍺≥≈⍵)&amp;gt;⍺&amp;gt;≈⍵}/sd&lt;br /&gt;
0 0 0 0 0 0 0 0 0 0 1 0 0 &lt;br /&gt;
      {⍺&amp;lt;≈⍵}/sd&lt;br /&gt;
0 0 0 0 0 0 0 0 0 0 0 1 0 &lt;br /&gt;
      {⍺&amp;gt;≈⍵}/sd&lt;br /&gt;
0 0 0 0 0 0 0 0 0 0 0 0 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Finally, the following example shows that the &#039;&#039;&#039;Sample Data&#039;&#039;&#039; are all distinct:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
      {⍺∘≈⍵}/sd&lt;br /&gt;
0 1 ¯1 2 ¯2 3 ¯3 4 ¯4 5 ¯5 6 ¯6&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Hypercomplex Ball Arithmetic==&lt;br /&gt;
&lt;br /&gt;
Ball Arithmetic also extends to all Hypercomplex numbers (Complex, Quaternion, and Octonion) such as &amp;lt;apll&amp;gt;1.2&amp;lt;_pom/&amp;gt;&amp;lt;_i/&amp;gt;2.2&amp;lt;/apll&amp;gt; which represents a Complex Ball Arithmetic number whose &#039;&#039;&#039;Real&#039;&#039;&#039; part is &amp;lt;apll&amp;gt;1.2&amp;lt;_pom/&amp;gt;&amp;lt;/apll&amp;gt; and whose &#039;&#039;&#039;Imaginary&#039;&#039;&#039; part is &amp;lt;apll&amp;gt;2.2&amp;lt;_pom/&amp;gt;&amp;lt;/apll&amp;gt;.  Note that the display of that number (at &amp;lt;apll&amp;gt;53&amp;lt;/apll&amp;gt; bits of precision)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
      1.2&amp;lt;_pom/&amp;gt;&amp;lt;_i/&amp;gt;2.2&lt;br /&gt;
1.2&amp;lt;_pom/&amp;gt;2.2&amp;lt;_E/&amp;gt;¯16&amp;lt;_i/&amp;gt;2.2&amp;lt;_pom/&amp;gt;4.4&amp;lt;_E/&amp;gt;¯16&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
demonstrates the inexactness of both floating point coefficients.&lt;br /&gt;
&lt;br /&gt;
==Small v. Large Radii==&lt;br /&gt;
&lt;br /&gt;
Ball Arithmetic works best when given small Radii, that is, small relative to the Midpoint.  Calculations on large Radii numbers such as &amp;lt;apll&amp;gt;0&amp;lt;_i/&amp;gt;0.5&amp;lt;_pom/&amp;gt;0.5&amp;lt;/apll&amp;gt; don&#039;t always produce useful results.  For example,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
      ⎕PP←8             ⍝ To reduce fractional clutter&lt;br /&gt;
      x←0&amp;lt;_i/&amp;gt;0.5&amp;lt;_pom/&amp;gt;0.5&lt;br /&gt;
      √x&lt;br /&gt;
0.4267767&amp;lt;_pom/&amp;gt;0.57&amp;lt;_i/&amp;gt;0&amp;lt;_pom/&amp;gt;1.4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Unfortunately in this case, because the Radius is so large it overwhelms the Midpoint, as can be seen when we Square the Square Root:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
      (√x)*2&lt;br /&gt;
0.18213835&amp;lt;_pom/&amp;gt;2.8&amp;lt;_i/&amp;gt;0&amp;lt;_pom/&amp;gt;2.8&lt;br /&gt;
      x=(√x)*2&lt;br /&gt;
0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These calculations work better using smaller Radii, such as&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
      y←0&amp;lt;_i/&amp;gt;0.5&amp;lt;_pom/&amp;gt;0.5&amp;lt;_E/&amp;gt;¯30&lt;br /&gt;
      √y&lt;br /&gt;
0.5&amp;lt;_pom/&amp;gt;2.5&amp;lt;_E/&amp;gt;¯31&amp;lt;_i/&amp;gt;0.5&amp;lt;_pom/&amp;gt;7.5&amp;lt;_E/&amp;gt;¯31&lt;br /&gt;
      (√y)*2&lt;br /&gt;
0&amp;lt;_pom/&amp;gt;1&amp;lt;_E/&amp;gt;¯30&amp;lt;_i/&amp;gt;0.5&amp;lt;_pom/&amp;gt;1&amp;lt;_E/&amp;gt;¯30 &lt;br /&gt;
      y=(√y)*2&lt;br /&gt;
1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where Square Root now returns a meaningful result, and its Square returns the original value.&lt;br /&gt;
&lt;br /&gt;
==Mixed Notation==&lt;br /&gt;
&lt;br /&gt;
The notation for Ball Arithmetic may be combined with other Point Notations in many ways, such as&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
      1&amp;lt;_p/&amp;gt;1&amp;lt;_pom/&amp;gt;&lt;br /&gt;
3.141592653589793&amp;lt;_pom/&amp;gt;4.4&amp;lt;_E/&amp;gt;¯16 &lt;br /&gt;
      1&amp;lt;_x/&amp;gt;1&amp;lt;_pom/&amp;gt;&lt;br /&gt;
2.718281828459045&amp;lt;_pom/&amp;gt;4.5&amp;lt;_E/&amp;gt;¯16&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For more details about combining different forms of Point Notation, see [[Point_Notation|Point Notation]] and in particular the section on [[Point_Notation#Mixed_Notation|Mixed Notation]].&lt;br /&gt;
&lt;br /&gt;
==Implementation==&lt;br /&gt;
&lt;br /&gt;
===Datataypes===&lt;br /&gt;
&lt;br /&gt;
This feature adds four new datatypes to the language:  one each for the four Division Algebras.  Note that marking any one of the Hypercomplex coefficients as a Ball automatically marks them all as Balls.&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|Real||&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;apll&amp;gt;23&amp;lt;_pom/&amp;gt;&amp;lt;/apll&amp;gt; or &amp;lt;apll&amp;gt;1.2&amp;lt;_pom/&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Complex||&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;apll&amp;gt;23&amp;lt;_i/&amp;gt;1.2&amp;lt;_pom/&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Quaternion||&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;apll&amp;gt;23&amp;lt;_i/&amp;gt;1.2&amp;lt;_j/&amp;gt;0.5&amp;lt;_k/&amp;gt;¯3.14&amp;lt;_pom/&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Octonion||&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;apll&amp;gt;23&amp;lt;_i/&amp;gt;1.2&amp;lt;_j/&amp;gt;0.5&amp;lt;_k/&amp;gt;¯3.14&amp;lt;l/&amp;gt;¯3&amp;lt;_ij/&amp;gt;19&amp;lt;_jk/&amp;gt;¯3&amp;lt;_kl/&amp;gt;6&amp;lt;_pom/&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Primitive Functions===&lt;br /&gt;
&lt;br /&gt;
As described above, this feature adds two new monadic primitive functions &#039;&#039;&#039;Contract&#039;&#039;&#039; (&amp;lt;apll&amp;gt;≤R&amp;lt;/apll&amp;gt;) and its inverse &#039;&#039;&#039;Distract&#039;&#039;&#039; (&amp;lt;apll&amp;gt;≥R&amp;lt;/apll&amp;gt;), along with one new monadic primitive operator &#039;&#039;&#039;DoubleTilde&#039;&#039;&#039; &amp;lt;apll&amp;gt;f≈ R&amp;lt;/apll&amp;gt; and &amp;lt;apll&amp;gt;L f≈ R&amp;lt;/apll&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
All primitive and system functions and operators are extended to work with Ball Arithmetic, so you can test out this feature on all algorithms, with the exception of trying to find the Factorial of a multiple-precision/Ball Arithmetic Hypercomplex number, in which case you are temporarily out of luck.&lt;br /&gt;
&lt;br /&gt;
==Workspace Version Number==&lt;br /&gt;
&lt;br /&gt;
For the moment, if you save a workspace which contains a Ball Arithmetic number in a variable, the workspace version number is &amp;lt;apll&amp;gt;0.03&amp;lt;/apll&amp;gt;.  Otherwise, the version number is &amp;lt;apll&amp;gt;0.02&amp;lt;/apll&amp;gt;.  Workspaces with Ball Arithmetic Numbers may not be loaded by an earlier version of the interpreter.&lt;br /&gt;
&lt;br /&gt;
==Pending Design Decisions==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;The direct comparison functions (&amp;lt;apll&amp;gt;&amp;amp;lt;≤=≥&amp;amp;gt;≠≡≢&amp;lt;/apll&amp;gt;) and indirect ones (&amp;lt;apll&amp;gt;⍳⍸∊⍷⍒⍋&amp;lt;/apll&amp;gt;) are currently implemented to compare the Midpoints of the arguments ignoring the Radius &amp;amp;mdash; this may change.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;The Floor function and its related functions (Ceiling, Residue, GCD, LCM, and Encode) are currently implemented to execute on the Midpoints of the arguments ignoring the Radius &amp;amp;mdash; this may change.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;We need new primitives to describe the different ways in which Balls can intersect/overlap, possibly through a new monadic operator (perhaps &amp;amp;#x2248;) on the existing direct and indirect comparison and Floor-related functions.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Certain primitives are defined on limited ranges, and sometimes multiple ranges where it might use different algorithms for different ranges (e.g. &amp;lt;apll&amp;gt;L!R&amp;lt;/apll&amp;gt;).  There are open questions about how to handle a Ball that spans two or more of these ranges as to how to calculate the result.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Infinity and NaN have not been given any special treatment as yet.  The results are whatever ARB has chosen which we may need to override.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Download==&lt;br /&gt;
&lt;br /&gt;
This feature is available as an Alpha release &amp;amp;mdash; it may be downloaded from the [http://www.nars2000.org/download/binaries/alpha/ Alpha] release directory.&lt;br /&gt;
&lt;br /&gt;
==Acknowledgements==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;The Arb team has contributed their Ball Arithmetic&amp;lt;ref name=&amp;quot;BallArithmetic&amp;quot; /&amp;gt; code which made this feature possible.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;David Rabenhorst has contributed many very useful ideas and many hours debugging the implementation.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Drab</name></author>
	</entry>
	<entry>
		<id>https://wiki.nars2000.org/index.php?title=Ball_Arithmetic&amp;diff=3370</id>
		<title>Ball Arithmetic</title>
		<link rel="alternate" type="text/html" href="https://wiki.nars2000.org/index.php?title=Ball_Arithmetic&amp;diff=3370"/>
		<updated>2018-10-26T10:12:44Z</updated>

		<summary type="html">&lt;p&gt;Drab: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
Ball&amp;lt;ref name=&amp;quot;BallArithmetic&amp;quot;&amp;gt;NARS2000 Wiki, [http://arblib.org Ball Arithmetic]&amp;lt;/ref&amp;gt; and Interval Arithmetic&amp;lt;ref name=&amp;quot;IntervalArithmetic&amp;quot;&amp;gt;Wikipedia, [https://en.wikipedia.org/wiki/Interval_arithmetic Interval Arithmetic]&amp;lt;/ref&amp;gt; both refer to the same idea of calculating with arbitrary precision inexact numbers &amp;amp;mdash; that is, with a range of floating point values instead of a single representative.  This allows such numbers to reflect their inexactness explicitly.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;The most common use is to keep track of and handle rounding errors directly during the calculation and of uncertainties in the knowledge of the exact values of physical and technical parameters. The latter often arise from measurement errors and tolerances for components or &#039;&#039;&#039;due to limits on computational accuracy&#039;&#039;&#039;. Interval arithmetic also helps find reliable and guaranteed solutions to equations and optimization problems.&amp;quot;&amp;lt;ref name=&amp;quot;IntervalArithmetic&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The difference between the two is in how each approach represents its values:  Interval Arithmetic uses the two ends of the interval &amp;lt;apll&amp;gt;[a, b]&amp;lt;/apll&amp;gt; whereas Ball Arithmetic uses a Ball with a Midpoint and Radius.  Each has its advantages.  Interval Arithmetic is implemented by several libraries such as MPFI&amp;lt;ref name=&amp;quot;MPFI&amp;quot;&amp;gt;[http://perso.ens-lyon.fr/nathalie.revol/software.html MPFI]&amp;lt;/ref&amp;gt; and Ball Arithmetic is implemented by ARB&amp;lt;ref name=&amp;quot;BallArithmetic&amp;quot; /&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
This feature uses the ARB&amp;lt;ref name=&amp;quot;BallArithmetic&amp;quot; /&amp;gt; library to implement Ball Arithmetic.&lt;br /&gt;
&lt;br /&gt;
==Environment==&lt;br /&gt;
&lt;br /&gt;
In the examples below, unless otherwise specified, the precision of multi-precision floating-point numbers is set to &amp;lt;apll&amp;gt;53&amp;lt;/apll&amp;gt; bits via &amp;lt;apll&amp;gt;⎕FPC←53&amp;lt;/apll&amp;gt; which is the same precision as standard double-precision numbers.  The Printing Precision is set to &amp;lt;apll&amp;gt;17&amp;lt;/apll&amp;gt; digits via &amp;lt;apll&amp;gt;⎕PP←17&amp;lt;/apll&amp;gt; so as to display the maximum number of significant digits at &amp;lt;apll&amp;gt;53&amp;lt;/apll&amp;gt; bits of precision.  The Comparison Tolerance is set via &amp;lt;apll&amp;gt;⎕CT←1&amp;lt;_E/&amp;gt;¯10&amp;lt;/apll&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Calculating With Ball Arithmetic==&lt;br /&gt;
&lt;br /&gt;
If you have ever entered an expression such as&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
      ÷3&lt;br /&gt;
0.3333333333333333&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
undoubtedly, you are aware that the result is inexact.  Moreover, as you incorporate into your code the many other functions that produce inexact numbers, you should be wondering &amp;quot;How does the accumulation of inexactness affect my results?&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The answer to that question lies in the province of [https://en.wikipedia.org/wiki/Numerical_analysis Numerical Analysis] where it is described as &amp;quot;the study of algorithms that use numerical approximation&amp;quot;.  In general, applying the techniques of Numerical Analysis often involves time-consuming analysis.  Fortunately, Ball Arithmetic is an easy to use alternative to that.  That is, instead of analyzing the algorithm, run the algorithm with all calculations done with Ball Arithmetic.&lt;br /&gt;
&lt;br /&gt;
Here is the same expression in Ball Arithmetic (use Alt-‘q’ or Ctrl-‘q’, depending on your keyboard layout, to enter the &amp;lt;apll&amp;gt;&amp;lt;_pom/&amp;gt;&amp;lt;/apll&amp;gt; symbol):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
      ÷3&amp;lt;_pom/&amp;gt;&lt;br /&gt;
0.3333333333333333&amp;lt;_pom/&amp;gt;5.6&amp;lt;_E/&amp;gt;¯17&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Essentially, each Ball Arithmetic number carries with it an explicit Radius that describes the interval which contains the true value.  Because Ball Arithmetic data propagates throughout a calculation and is never demoted to a lower datatype, its advantage is that after each operation the resulting Ball reliably includes the true answer.  Across an entire algorithm, the final result is a Ball that indicates explicitly how precise it is, thus eliminating the guesswork as to the effect on the algorithm of the inexactness of the input and any other inexact constants used.&lt;br /&gt;
&lt;br /&gt;
For example,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
      sqrt←{⍺←= ⋄ {0.5×⍵+⍺÷⍵}⍣⍺⍨⍵} ⍝ Calculate square root using Newton&#039;s method&lt;br /&gt;
      √2&amp;lt;_pom/&amp;gt;&lt;br /&gt;
1.414213562373095&amp;lt;_pom/&amp;gt;2.2&amp;lt;_E/&amp;gt;¯16&lt;br /&gt;
      sqrt 2&amp;lt;_pom/&amp;gt;&lt;br /&gt;
1.414213562373095&amp;lt;_pom/&amp;gt;1.1&amp;lt;_E/&amp;gt;¯15 &lt;br /&gt;
      10 sqrt 2&amp;lt;_pom/&amp;gt;&lt;br /&gt;
1.414213562373095&amp;lt;_pom/&amp;gt;2.8&amp;lt;_E/&amp;gt;¯15 &lt;br /&gt;
      100 sqrt 2&amp;lt;_pom/&amp;gt;&lt;br /&gt;
1.414213562373095&amp;lt;_pom/&amp;gt;3.3&amp;lt;_E/&amp;gt;¯14 &lt;br /&gt;
      1000 sqrt 2&amp;lt;_pom/&amp;gt;&lt;br /&gt;
1.414213562373095&amp;lt;_pom/&amp;gt;3.3&amp;lt;_E/&amp;gt;¯13 &lt;br /&gt;
      10000 sqrt 2&amp;lt;_pom/&amp;gt;&lt;br /&gt;
1.414213562373095&amp;lt;_pom/&amp;gt;3.5&amp;lt;_E/&amp;gt;¯12&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As you can see, after a few iterations, the accuracy of the result doesn&#039;t improve.  However, because it is an iterative algorithm, the precision worsens as the number of iterations increases.  Only by using Ball Arithmetic can you see just how the precision of the result is affected.&lt;br /&gt;
&lt;br /&gt;
To demonstrate with an extreme example, consider the following function:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
      f←{⍪⍵-3√(⍵*3)-⍵*2}&lt;br /&gt;
      f 10*3×⍳5&lt;br /&gt;
0.33344450621439137&lt;br /&gt;
0.3333334452472627 &lt;br /&gt;
0.33333444595336914&lt;br /&gt;
0.3348388671875    &lt;br /&gt;
2.25&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Without knowing much about this ([https://en.wikipedia.org/wiki/Condition_number ill-conditioned]) algorithm, you have no reason to suspect these results.  As it turns out, there&#039;s a mathematical proof that as the argument increases to infinity, the algorithm converges to &amp;lt;apll&amp;gt;÷3&amp;lt;/apll&amp;gt;.  Only when you calculate with Ball Arithmetic do you see that there is a problem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
      f 10*3×⍳5&amp;lt;_pom/&amp;gt;&lt;br /&gt;
0.3334445062153009&amp;lt;_pom/&amp;gt;2.2&amp;lt;_E/&amp;gt;¯12  &lt;br /&gt;
0.3333334461785853&amp;lt;_pom/&amp;gt;4.3&amp;lt;_E/&amp;gt;¯9   &lt;br /&gt;
0.333337664604187&amp;lt;_pom/&amp;gt;0.0000062&lt;br /&gt;
0.3385009765625&amp;lt;_pom/&amp;gt;0.0085&lt;br /&gt;
1.25&amp;lt;_pom/&amp;gt;5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As you can see, the precision worsens quickly to the point where the result is meaningless.  The last line even says that the answer lies somewhere between &amp;lt;apll&amp;gt;¯3.75&amp;lt;/apll&amp;gt; and &amp;lt;apll&amp;gt;6.25&amp;lt;/apll&amp;gt;.  In other words, that answer is so &#039;&#039;&#039;imprecise&#039;&#039;&#039; as to be &#039;&#039;&#039;inaccurate&#039;&#039;&#039;!  At higher powers of ten, the answers only worsen.&lt;br /&gt;
&lt;br /&gt;
The good news with Ball Arithmetic is that if you need greater precision, just increase the value of &amp;lt;apll&amp;gt;⎕FPC&amp;lt;/apll&amp;gt;.  For example,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
      ⎕FPC←128 ⋄ ⎕PP←40&lt;br /&gt;
      sqrt 2&amp;lt;_pom/&amp;gt;&lt;br /&gt;
1.41421356237309504880168872420969807857&amp;lt;_pom/&amp;gt;5.9&amp;lt;_E/&amp;gt;¯39&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the case of an ill-conditioned algorithm, we just push the problem off a bit, but not very far &amp;amp;mdash; the problem is that the algorithm requires infinite precision:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
      f 10*3×⍳10&amp;lt;_pom/&amp;gt;&lt;br /&gt;
0.333444506214021971364848444464298690637&amp;lt;_pom/&amp;gt;3.4&amp;lt;_E/&amp;gt;¯35&lt;br /&gt;
0.333333444444506172880658466392407138179&amp;lt;_pom/&amp;gt;1.1&amp;lt;_E/&amp;gt;¯31&lt;br /&gt;
0.333333333444444444506172839632668381652&amp;lt;_pom/&amp;gt;1.6&amp;lt;_E/&amp;gt;¯28&lt;br /&gt;
0.333333333333444444444444547458328123363&amp;lt;_pom/&amp;gt;2.2&amp;lt;_E/&amp;gt;¯25&lt;br /&gt;
0.333333333333333444444619474517508476812&amp;lt;_pom/&amp;gt;3.2&amp;lt;_E/&amp;gt;¯22&lt;br /&gt;
0.333333333333333333552432522356445687706&amp;lt;_pom/&amp;gt;1.3&amp;lt;_E/&amp;gt;¯19&lt;br /&gt;
0.333333333333333491771410805881714622956&amp;lt;_pom/&amp;gt;4.5&amp;lt;_E/&amp;gt;¯16&lt;br /&gt;
0.333333333333417414223731611855328083038&amp;lt;_pom/&amp;gt;4.5&amp;lt;_E/&amp;gt;¯13&lt;br /&gt;
0.33333333363771089352667331695556640625&amp;lt;_pom/&amp;gt;4.5&amp;lt;_E/&amp;gt;¯10 &lt;br /&gt;
0.3333334587514400482177734375&amp;lt;_pom/&amp;gt;2.6&amp;lt;_E/&amp;gt;¯7&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
While your floating point code might not be so ill-conditioned, the only way to be sure of its results is one of&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Hire a Numerical Analyst&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Become a Numerical Analyst&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Use Ball Arithmetic&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Ball Arithmetic Numbers==&lt;br /&gt;
&lt;br /&gt;
A Ball Arithmetic number consist of two parts:  a Midpoint and Radius.  The Midpoint value represents the middle of the Ball and the Radius represents the distance around the Ball of possible values.  There is no way to tell which value in the Ball is the correct answer &amp;amp;mdash; you should assume that all values are potential candidates.  &lt;br /&gt;
&lt;br /&gt;
The precision at which the Midpoint and Radius are stored depends upon the current value of &amp;lt;apll&amp;gt;⎕FPC&amp;lt;/apll&amp;gt;.  For example, the following display&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
      ⎕FPC←53&lt;br /&gt;
      ÷3&amp;lt;_pom/&amp;gt;&lt;br /&gt;
0.3333333333333333&amp;lt;_pom/&amp;gt;5.6&amp;lt;_E/&amp;gt;¯17&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
indicates that the number &amp;lt;apll&amp;gt;÷3&amp;lt;_pom/&amp;gt;&amp;lt;/apll&amp;gt; has a Midpoint of &amp;lt;apll&amp;gt;0.3333333333333333&amp;lt;/apll&amp;gt; at &amp;lt;apll&amp;gt;53&amp;lt;/apll&amp;gt;-bit precision and a Radius of &amp;lt;apll&amp;gt;5.6&amp;lt;_E/&amp;gt;¯17&amp;lt;/apll&amp;gt;.  The Midpoint is stored as a variable precision number, and the Radius is stored as a low-precision number.&lt;br /&gt;
&lt;br /&gt;
Alternatively,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
      ⎕FPC←128 ⋄ ⎕PP←40&lt;br /&gt;
      ÷3&amp;lt;_pom/&amp;gt;&lt;br /&gt;
0.333333333333333333333333333333333333332&amp;lt;_pom/&amp;gt;1.5&amp;lt;_E/&amp;gt;¯39&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
shows the corresponding value at a higher precision and correspondingly narrower Radius.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The approximate number of digits of precision for a given value of &amp;lt;apll&amp;gt;⎕FPC&amp;lt;/apll&amp;gt; is about &amp;lt;apll&amp;gt;10⍟2*⎕FPC&amp;lt;/apll&amp;gt;. The value of &amp;lt;apll&amp;gt;⎕FPC&amp;lt;/apll&amp;gt; for a given required precision is about &amp;lt;apll&amp;gt;⌈2⍟10*digits&amp;lt;/apll&amp;gt;.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The current &amp;lt;apll&amp;gt;⎕FPC&amp;lt;/apll&amp;gt; precision&lt;br /&gt;
should be sufficient to cover both the midpoint and the radius&lt;br /&gt;
of all ball numbers being used.&lt;br /&gt;
Otherwise,&lt;br /&gt;
some results might be misleading.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For example,&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;apll&amp;gt;&lt;br /&gt;
      2v*⎕fpc←128&lt;br /&gt;
3.402823669E38&lt;br /&gt;
      ⍟ ⎕← * 1±1e¯1000&lt;br /&gt;
2.718281828±1.2E¯38&lt;br /&gt;
1±7.3E¯39&lt;br /&gt;
&amp;lt;/apll&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
What happened? -- &amp;lt;apll&amp;gt;⎕FPC&amp;lt;/apll&amp;gt; was too small!&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;apll&amp;gt;&lt;br /&gt;
      2v*⎕fpc←4096&lt;br /&gt;
1.044388881E1233&lt;br /&gt;
      ⍟ ⎕← * 1±1e¯1000&lt;br /&gt;
2.718281828±2.7E¯1000&lt;br /&gt;
1±1E¯1000&lt;br /&gt;
&amp;lt;/apll&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A Ball describes a range of &#039;&#039;&#039;variable-precision floating point numbers&#039;&#039;&#039;, and so the expression &amp;lt;apll&amp;gt;23&amp;lt;_pom/&amp;gt;1&amp;lt;/apll&amp;gt; represents the set of Real numbers between &amp;lt;apll&amp;gt;22&amp;lt;/apll&amp;gt; and &amp;lt;apll&amp;gt;24&amp;lt;/apll&amp;gt;, inclusive, &#039;&#039;&#039;not&#039;&#039;&#039; the three integers &amp;lt;apll&amp;gt;22&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;23&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;24&amp;lt;/apll&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot; style=&amp;quot; background-color:lightcyan;&amp;quot;&amp;gt;In general, suffix notation on Ball Arithmetic constants should be sufficient for &#039;&#039;&#039;almost all purposes&#039;&#039;&#039;.  That is, the Radius is already correctly calculated for constants such as &amp;lt;apll&amp;gt;23&amp;lt;_pom/&amp;gt;&amp;lt;/apll&amp;gt; whose Radius is zero, and &amp;lt;apll&amp;gt;1.2&amp;lt;_pom/&amp;gt;&amp;lt;/apll&amp;gt; whose Radius at &amp;lt;apll&amp;gt;53&amp;lt;/apll&amp;gt; bits of precision is on the order of &amp;lt;apll&amp;gt;2*¯53&amp;lt;/apll&amp;gt; (because of the inexactness of the Midpoint &amp;lt;apll&amp;gt;1.2&amp;lt;/apll&amp;gt;) which displays as &amp;lt;apll&amp;gt;1.2&amp;lt;_pom/&amp;gt;2.2&amp;lt;_E/&amp;gt;¯16&amp;lt;/apll&amp;gt;.  Although the input notation supports it, the need to override the default Radius should be &#039;&#039;&#039;quite rare&#039;&#039;&#039;.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==New Functions and Operator==&lt;br /&gt;
&lt;br /&gt;
===Functions To Convert To And From Ball Arithmetic Numbers===&lt;br /&gt;
&lt;br /&gt;
A Ball Arithmetic constant number may be created through notation (as seen above).  Otherwise, a Ball Arithmetic number also may be created from its constituent parts under program control with a new primitive function &#039;&#039;&#039;Contract&#039;&#039;&#039;, and separated into its constituent parts with a new primitive function &#039;&#039;&#039;Distract&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
====Contract====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Contract&#039;&#039;&#039; is a monadic function (&amp;lt;apll&amp;gt;≤R&amp;lt;/apll&amp;gt;) whose right argument is a Real array.  It may be used to create a Ball Arithmetic number from the one- or two-elements of its Midpoint and (optional) Radius.  The Axis Operator may specify any length &amp;lt;apll&amp;gt;1&amp;lt;/apll&amp;gt; or &amp;lt;apll&amp;gt;2&amp;lt;/apll&amp;gt; coordinate along which the conversion takes place.  It converts the first element along the specified dimension to the Midpoint of the result and (if present) the second element to its Radius.  If the second element is not present (i.e., length &amp;lt;apll&amp;gt;1&amp;lt;/apll&amp;gt; coordinate), the Radius used is calculated from the precision of the Midpoint.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
      ≤23&lt;br /&gt;
23&lt;br /&gt;
      ≤1.2&lt;br /&gt;
1.2&amp;lt;_pom/&amp;gt;1.1&amp;lt;_E/&amp;gt;¯16&lt;br /&gt;
      ≤1.3 1&amp;lt;_E/&amp;gt;¯20&lt;br /&gt;
1.3&amp;lt;_pom/&amp;gt;1&amp;lt;_E/&amp;gt;¯20&lt;br /&gt;
      ≤1r2 1&amp;lt;_E/&amp;gt;¯20&lt;br /&gt;
0.5&amp;lt;_pom/&amp;gt;1&amp;lt;_E/&amp;gt;¯20&lt;br /&gt;
      ≤○1&lt;br /&gt;
3.141592653589793&amp;lt;_pom/&amp;gt;1.1&amp;lt;_E/&amp;gt;¯16 &lt;br /&gt;
      ≤(○1) 1&amp;lt;_E/&amp;gt;¯20&lt;br /&gt;
3.141592653589793&amp;lt;_pom/&amp;gt;1&amp;lt;_E/&amp;gt;¯20 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Distract====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Distract&#039;&#039;&#039; is a monadic function (&amp;lt;apll&amp;gt;≥R&amp;lt;/apll&amp;gt;) whose right argument is a Real array.  It may be used to separate out a Ball Arithmetic&#039;s Midpoint and Radius into two distinct values.  The Axis Operator may specify the place where the new length &amp;lt;apll&amp;gt;2&amp;lt;/apll&amp;gt; coordinate is to be inserted.  The pair of values along this new coordinate are the Midpoint and Radius of the corresponding number from the right argument.  If the number can be represented exactly, the Radius is zero.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
      ⎕PP←10&lt;br /&gt;
      ≥1.2&lt;br /&gt;
1.2 1.1102230246251565&amp;lt;_E/&amp;gt;¯16&lt;br /&gt;
      ≥1.2&amp;lt;_x/&amp;gt;&lt;br /&gt;
6&amp;lt;_r/&amp;gt;5 0&lt;br /&gt;
      ≥1.2&amp;lt;_v/&amp;gt;&lt;br /&gt;
1.2 1.110223024625157&amp;lt;_E/&amp;gt;¯16&lt;br /&gt;
      ≥1.2&amp;lt;_pom/&amp;gt;&lt;br /&gt;
1.2 2.220446049250313&amp;lt;_E/&amp;gt;¯16&lt;br /&gt;
      ≥1.5&lt;br /&gt;
1.5 0&lt;br /&gt;
      ≥1.5&amp;lt;_x/&amp;gt;&lt;br /&gt;
3&amp;lt;_r/&amp;gt;2 0&lt;br /&gt;
      ≥1.5&amp;lt;_v/&amp;gt;&lt;br /&gt;
1.5 1.110223024625157&amp;lt;_E/&amp;gt;¯16&lt;br /&gt;
      ≥1.5&amp;lt;_pom/&amp;gt;&lt;br /&gt;
1.5 0&lt;br /&gt;
      a←(○1&amp;lt;_pom/&amp;gt;)×⍳4&lt;br /&gt;
      a,&#039;|&#039;,≥a&lt;br /&gt;
 3.141592654&amp;lt;_pom/&amp;gt;4.4&amp;lt;_E/&amp;gt;¯16 |  3.141592654 4.440892148&amp;lt;_E/&amp;gt;¯16&lt;br /&gt;
 6.283185307&amp;lt;_pom/&amp;gt;8.9&amp;lt;_E/&amp;gt;¯16 |  6.283185307 8.881784296&amp;lt;_E/&amp;gt;¯16&lt;br /&gt;
 9.424777961&amp;lt;_pom/&amp;gt;1.3&amp;lt;_E/&amp;gt;¯15 |  9.424777961 1.332267643&amp;lt;_E/&amp;gt;¯15&lt;br /&gt;
12.56637061&amp;lt;_pom/&amp;gt;1.8&amp;lt;_E/&amp;gt;¯15  | 12.56637061  1.776356859&amp;lt;_E/&amp;gt;¯15&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These numbers can be represented exactly:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
      ≥⍳4&amp;lt;_pom/&amp;gt;&lt;br /&gt;
1 0&lt;br /&gt;
2 0&lt;br /&gt;
3 0&lt;br /&gt;
4 0&lt;br /&gt;
      ≥[2]⍳4&amp;lt;_pom/&amp;gt;&lt;br /&gt;
1 0&lt;br /&gt;
2 0&lt;br /&gt;
3 0&lt;br /&gt;
4 0&lt;br /&gt;
      ≥[1]⍳4&amp;lt;_pom/&amp;gt;&lt;br /&gt;
1 2 3 4&lt;br /&gt;
0 0 0 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Identities====&lt;br /&gt;
&lt;br /&gt;
The Contract of the Distract of a number both along the same axis, returns the same number.&amp;lt;br /&amp;gt;The Distract of the Contract of a number both along the same length two axis, returns the same number.&lt;br /&gt;
&lt;br /&gt;
===Operator To Provide Arbitrary Precision Specific Derived Functions===&lt;br /&gt;
&lt;br /&gt;
The DoubleTilde monadic operator (&amp;lt;apll&amp;gt;≈&amp;lt;/apll&amp;gt;, Alt-&#039;Q&#039; or Alt-shift-&#039;q&#039;) takes a primitive function as its left operand and produces an arbitrary-precision-specific derived function.&lt;br /&gt;
&lt;br /&gt;
This operator should be considered preliminary.&lt;br /&gt;
&lt;br /&gt;
====Conversion Between Balls and Intervals====&lt;br /&gt;
&lt;br /&gt;
At the moment, the monadic derived function is defined for two primitive functions.&lt;br /&gt;
&lt;br /&gt;
Because Ball Arithmetic has a close relationship with Interval Arithmetic, it may be desirable to convert between the two forms: Endpoint to Midpoint-Radius and its inverse.  The resulting derived function is not scalar.&lt;br /&gt;
&lt;br /&gt;
For example,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
      x←0&amp;lt;_pom/&amp;gt;∞ 1&amp;lt;_pom/&amp;gt;2&lt;br /&gt;
      ≥≈x&lt;br /&gt;
¯∞ ∞&lt;br /&gt;
¯1 3&lt;br /&gt;
      ≥[1]≈x&lt;br /&gt;
¯∞ ¯1&lt;br /&gt;
 ∞  3&lt;br /&gt;
      ≥[2]≈x&lt;br /&gt;
¯∞ ∞&lt;br /&gt;
¯1 3&lt;br /&gt;
      ≤≈≥≈x&lt;br /&gt;
0&amp;lt;_pom/&amp;gt;∞ 1&amp;lt;_pom/&amp;gt;2&lt;br /&gt;
      ≤≈≥[2]≈x&lt;br /&gt;
0&amp;lt;_pom/&amp;gt;∞ 1&amp;lt;_pom/&amp;gt;2&lt;br /&gt;
      ≤[2]≈≥≈x&lt;br /&gt;
0&amp;lt;_pom/&amp;gt;∞ 1&amp;lt;_pom/&amp;gt;2&lt;br /&gt;
      ≤[2]≈≥[2]≈x&lt;br /&gt;
0&amp;lt;_pom/&amp;gt;∞ 1&amp;lt;_pom/&amp;gt;2 &lt;br /&gt;
      ≤[1]≈≥[1]≈x&lt;br /&gt;
0&amp;lt;_pom/&amp;gt;∞ 1&amp;lt;_pom/&amp;gt;2 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The domain of these functions is limited to Real numbers.  Hypercomplex numbers signal a &amp;lt;apll&amp;gt;DOMAIN ERROR&amp;lt;/apll&amp;gt;.  To see the Endpoints of a Hypercomplex number, first &#039;&#039;&#039;Dilate&#039;&#039;&#039; it so as to separate out the coefficients and then apply &amp;lt;apll&amp;gt;≥≈&amp;lt;/apll&amp;gt; to extract the Endpoints as in &amp;lt;apll&amp;gt;≥≈&amp;amp;gt;R&amp;lt;/apll&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
For example,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;      ≥≈ 2±0i0±1&lt;br /&gt;
DOMAIN ERROR&lt;br /&gt;
      ≥≈ 2±0i0±1&lt;br /&gt;
      ∧&lt;br /&gt;
      ≥≈&amp;gt;2±0i0±1&lt;br /&gt;
 2 2&lt;br /&gt;
¯1 1&lt;br /&gt;
      &amp;lt;≤≈≥≈&amp;gt;2±0i0±1&lt;br /&gt;
2±0i0±1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Union and Intersection of Balls====&lt;br /&gt;
&lt;br /&gt;
The left operand of the DoubleTilde operator is defined for the &#039;&#039;&#039;Union&#039;&#039;&#039; and &#039;&#039;&#039;Intersection&#039;&#039;&#039; functions (&amp;lt;apll&amp;gt;∪∩&amp;lt;/apll&amp;gt;) as follows: &lt;br /&gt;
&lt;br /&gt;
Because Ball arithmetic numbers represent a range of floating point numbers, at times it is desirable to produce their Union or Intersection.&lt;br /&gt;
&lt;br /&gt;
For example,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
      x←0.5&amp;lt;pom/&amp;gt;0.5      ⍝ The interval [0,1]&lt;br /&gt;
      x∪≈x+2         ⍝ The interval [0,1] ∪ [2,3] ←→ [0,3]&lt;br /&gt;
1.5&amp;lt;pom/&amp;gt;1.5&lt;br /&gt;
      x∪≈x+1         ⍝ The interval [0,1] ∪ [1,2] ←→ [0,2]&lt;br /&gt;
1&amp;lt;pom/&amp;gt;1 &lt;br /&gt;
      x∩≈x+1         ⍝ The interval [0,1] ∩ [1,2] ←→ [1,1]&lt;br /&gt;
1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If two Balls have no points in common, the result is a NaN (&amp;lt;apll&amp;gt;∅&amp;lt;/apll&amp;gt;):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
      x∩≈x+1.1       ⍝ The interval [0,1] ∩ [1.1,2.1] ←→ ∅&lt;br /&gt;
∅&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The identity element for &amp;lt;apll&amp;gt;∩≈&amp;lt;/apll&amp;gt; is &amp;lt;apll&amp;gt;0±∞&amp;lt;/apll&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The derived functions are scalar.&lt;br /&gt;
&lt;br /&gt;
====Comparison Functions====&lt;br /&gt;
&lt;br /&gt;
The left operand of the DoubleTilde operator is defined for the six comparison functions (&amp;lt;apll&amp;gt;&amp;amp;lt;≤=≥&amp;amp;gt;≠&amp;lt;/apll&amp;gt;) as follows:&lt;br /&gt;
&lt;br /&gt;
For &amp;lt;apll&amp;gt;&amp;lt;i&amp;gt;f&amp;lt;/i&amp;gt;&amp;lt;/apll&amp;gt; as one of the above six functions, &amp;lt;apll&amp;gt;L&amp;lt;i&amp;gt;f&amp;lt;/i&amp;gt;≈R&amp;lt;/apll&amp;gt; is TRUE iff for all &amp;lt;apll&amp;gt;t∊L&amp;lt;/apll&amp;gt; and &amp;lt;apll&amp;gt;u∊R&amp;lt;/apll&amp;gt;, then &amp;lt;apll&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;t f u&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;/apll&amp;gt; is TRUE.  These comparisons are all done with &amp;lt;apll&amp;gt;⎕CT←0&amp;lt;/apll&amp;gt; because, in a sense, Ball comparisons carry their own Fuzz.&lt;br /&gt;
&lt;br /&gt;
For example,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;      (L R)←4&amp;lt;_pom/&amp;gt;1 6&amp;lt;_pom/&amp;gt;1&lt;br /&gt;
      L&amp;lt;≈R&lt;br /&gt;
0&lt;br /&gt;
      L≤≈R&lt;br /&gt;
1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The derived functions are scalar.&lt;br /&gt;
&lt;br /&gt;
====Containing Functions====&lt;br /&gt;
&lt;br /&gt;
The left operand of the DoubleTilde operator is defined for two containing functions (&amp;lt;apll&amp;gt;⊂⊃&amp;lt;/apll&amp;gt;) as follows:&lt;br /&gt;
&lt;br /&gt;
The expression &amp;lt;apll&amp;gt;L⊂≈R&amp;lt;/apll&amp;gt; is TRUE iff for all &amp;lt;apll&amp;gt;t∊L&amp;lt;/apll&amp;gt; it is TRUE that &amp;lt;apll&amp;gt;t∊R&amp;lt;/apll&amp;gt; and that the containment is strict &amp;amp;mdash; that is, none of the endpoints match.&lt;br /&gt;
&lt;br /&gt;
The expression &amp;lt;apll&amp;gt;L⊃≈R&amp;lt;/apll&amp;gt; is TRUE iff &amp;lt;apll&amp;gt;R⊂≈L&amp;lt;/apll&amp;gt; is TRUE.&lt;br /&gt;
&lt;br /&gt;
For example,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
      (L R)←6±4 6±2&lt;br /&gt;
      L⊃≈R&lt;br /&gt;
1&lt;br /&gt;
      R⊂≈L&lt;br /&gt;
1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The derived functions are scalar.&lt;br /&gt;
&lt;br /&gt;
====Positional Relationships====&lt;br /&gt;
&lt;br /&gt;
For &amp;lt;apll&amp;gt;L&amp;lt;/apll&amp;gt; and &amp;lt;apll&amp;gt;R&amp;lt;/apll&amp;gt; as finite intervals with non-zero Radii (i.e., multi-valued), here are the possible &#039;&#039;&#039;Relative Positions&#039;&#039;&#039; between the two Intervals, where &amp;lt;apll&amp;gt;L0&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;L1&amp;lt;/apll&amp;gt; and &amp;lt;apll&amp;gt;R0&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;R1&amp;lt;/apll&amp;gt; are the endpoints of &amp;lt;apll&amp;gt;L&amp;lt;/apll&amp;gt; and &amp;lt;apll&amp;gt;R&amp;lt;/apll&amp;gt;, respectively &amp;amp;mdash; &amp;lt;apll&amp;gt;(L0 L1)←≥≈L&amp;lt;/apll&amp;gt; and &amp;lt;apll&amp;gt;(R0 R1)←≥≈R&amp;lt;/apll&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; rowspacing=&amp;quot;5&amp;quot; style=&amp;quot;font-family:APL385, SImPL;&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Relative&amp;lt;br/&amp;gt;Positions&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Endpoint&amp;lt;br/&amp;gt;Relationships&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th colspan=&amp;quot;2&amp;quot;&amp;gt;Defining&amp;lt;br/&amp;gt;Expressions&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Sample Data&amp;lt;br/&amp;gt;L &amp;amp;nbsp; R&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Distinct&amp;lt;br/&amp;gt;Ball&amp;lt;br/&amp;gt;{⍺∘≈⍵}&amp;lt;/th&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;├──L──┤&amp;lt;br/&amp;gt;&amp;amp;nbsp;├──R──┤&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;L0 L1≡R0 R1&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;L=≈R&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;6&amp;lt;_pom/&amp;gt;4  6&amp;lt;_pom/&amp;gt;4&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;0&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;├──L──┤&amp;lt;br/&amp;gt;&amp;amp;nbsp;├──R─┤&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;(L0=R0)∧L1&amp;amp;gt;R1&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;6&amp;lt;_pom/&amp;gt;4  5&amp;lt;_pom/&amp;gt;3&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;1&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;├──L─┤&amp;lt;br/&amp;gt;&amp;amp;nbsp;├──R──┤&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;(L0=R0)∧L1&amp;amp;lt;R1&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;6&amp;lt;_pom/&amp;gt;4  7&amp;lt;_pom/&amp;gt;5&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;¯1&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;├──L──┤&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;├──R─┤&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;(L0&amp;amp;lt;R0)∧L1=R1&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;6&amp;lt;_pom/&amp;gt;4  7&amp;lt;_pom/&amp;gt;3&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;2&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;├──L─┤&amp;lt;br/&amp;gt;&amp;amp;nbsp;├──R──┤&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;(L0&amp;amp;gt;R0)∧L1=R1&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;6&amp;lt;_pom/&amp;gt;4  5&amp;lt;_pom/&amp;gt;5&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;¯2&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;├──L──┤&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;├─R─┤&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;(L0&amp;amp;lt;R0)∧L1&amp;amp;gt;R1&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;L⊃≈R&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;6&amp;lt;_pom/&amp;gt;4  6&amp;lt;_pom/&amp;gt;2&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;3&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;├─L─┤&amp;lt;br/&amp;gt;&amp;amp;nbsp;├──R──┤&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;(L0&amp;amp;gt;R0)∧L1&amp;amp;lt;R1&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;L⊂≈R&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;6&amp;lt;_pom/&amp;gt;4  6&amp;lt;_pom/&amp;gt;6&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;¯3&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;├──L──┤&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;├──R──┤&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;(L0&amp;amp;lt;R0)∧(L1&amp;amp;lt;R1)∧L1&amp;amp;gt;R0&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;6&amp;lt;_pom/&amp;gt;4  8&amp;lt;_pom/&amp;gt;4&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;4&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;├──L──┤&amp;lt;br/&amp;gt;&amp;amp;nbsp;├──R──┤&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;(L0&amp;amp;gt;R0)∧(L1&amp;amp;gt;R1)∧L0&amp;amp;lt;R1&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;6&amp;lt;_pom/&amp;gt;4  4&amp;lt;_pom/&amp;gt;4&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;¯4&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;├──L──┼──R──┤&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;L1=R0&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;(L≤≈R)&amp;amp;gt;L&amp;amp;lt;≈R&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;L=∀R&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;6&amp;lt;_pom/&amp;gt;4 14&amp;lt;_pom/&amp;gt;4&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;5&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;├──R──┼──L──┤&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;L0=R1&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;(L≥≈R)&amp;amp;gt;L&amp;amp;gt;≈R&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;L=∃R&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;6&amp;lt;_pom/&amp;gt;4  0&amp;lt;_pom/&amp;gt;2&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;¯5&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;├──L──┤&amp;amp;nbsp;├──R──┤&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;L1&amp;amp;lt;R0&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;L&amp;amp;lt;≈R&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;L&amp;amp;lt;∀R&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;6&amp;lt;_pom/&amp;gt;4 17&amp;lt;_pom/&amp;gt;5&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;6&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;├──R──┤&amp;amp;nbsp;├──L──┤&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;L0&amp;amp;gt;R1&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;L&amp;amp;gt;≈R&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;L&amp;amp;gt;∃R&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;6&amp;lt;_pom/&amp;gt;4  0&amp;lt;_pom/&amp;gt;1&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;¯6&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The above table can be interpreted as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;The first column lists all possible &#039;&#039;&#039;Relative Positions&#039;&#039;&#039; two finite non-zero Radii (i.e., multi-valued) Balls may assume.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;The second column lists the &#039;&#039;&#039;Endpoint Relationship&#039;&#039;&#039; that defines the corresponding &#039;&#039;&#039;Relative Position&#039;&#039;&#039;.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;The third column lists a &#039;&#039;&#039;Defining Expression&#039;&#039;&#039; using the &#039;&#039;&#039;DoubleTilde&#039;&#039;&#039; operator that is TRUE for the corresponding &#039;&#039;&#039;Relative Position&#039;&#039;&#039; and FALSE for all of the other &#039;&#039;&#039;Relative Positions&#039;&#039;&#039; in different rows.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;The fourth column lists a &#039;&#039;&#039;Defining Expression&#039;&#039;&#039; using the &#039;&#039;&#039;Always&#039;&#039;&#039; and &#039;&#039;&#039;Possibly&#039;&#039;&#039; operators [http://forum.nars2000.org/ball-arithmetic-t614.html#p1803 proposed] by David Rabenhorst.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;The fifth column contains &#039;&#039;&#039;Sample Data&#039;&#039;&#039; that defines the corresponding &#039;&#039;&#039;Relative Position&#039;&#039;&#039;.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;The sixth column gives the value of the &#039;&#039;&#039;Distinct Ball&#039;&#039;&#039; function &amp;lt;apll&amp;gt;{⍺∘≈⍵}&amp;lt;/apll&amp;gt; when executed on the &#039;&#039;&#039;Sample Data&#039;&#039;&#039;.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note the table is organized such that apart from the first row (whose &#039;&#039;&#039;Endpoint Relationship&#039;&#039;&#039; is Symmetric in &amp;lt;apll&amp;gt;L&amp;lt;/apll&amp;gt; and &amp;lt;apll&amp;gt;R&amp;lt;/apll&amp;gt;) the rows occur in six pairs where the &#039;&#039;&#039;Endpoint Relationship&#039;&#039;&#039; for each row in the pair can be obtained from the other by swapping &amp;lt;apll&amp;gt;L&amp;lt;/apll&amp;gt; and &amp;lt;apll&amp;gt;R&amp;lt;/apll&amp;gt;.  The pairs of rows are ordered roughly by the amount of overlap between the two Balls.&lt;br /&gt;
&lt;br /&gt;
As you can see, we are missing &#039;&#039;&#039;Defining Expressions&#039;&#039;&#039; for several of the &#039;&#039;&#039;Relative Positions&#039;&#039;&#039;.  I was hoping that this table would be filled in with more detail so it would serve as a measure of whether or not we had a complete set of functions/operators which could be used to tell apart all of the &#039;&#039;&#039;Relative Positions&#039;&#039;&#039; without having to resort to the &#039;&#039;&#039;Distinct Ball&#039;&#039;&#039; function &amp;lt;apll&amp;gt;{⍺∘≈⍵}&amp;lt;/apll&amp;gt; constructed explicitly for this purpose.  Please add to this table if you find a missing expression, or wish to propose whole new functions and/or operators.&lt;br /&gt;
&lt;br /&gt;
If you would like to try a &#039;&#039;&#039;Defining Expression&#039;&#039;&#039; on the &#039;&#039;&#039;Sample Data&#039;&#039;&#039;, collect the data into a &amp;lt;apll&amp;gt;13&amp;lt;/apll&amp;gt; by &amp;lt;apll&amp;gt;2&amp;lt;/apll&amp;gt; matrix, put your &#039;&#039;&#039;Defining Expression&#039;&#039;&#039; into (say) an Anonymous Function and reduce the same data matrix along the last coordinate &amp;amp;mdash; if you have a successful function, you should see a &amp;lt;apll&amp;gt;13&amp;lt;/apll&amp;gt;-element Boolean vector with a single one in it.  For example,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
      sd←6&amp;lt;_pom/&amp;gt;4,⍪6&amp;lt;_pom/&amp;gt;4 5&amp;lt;_pom/&amp;gt;3 7&amp;lt;_pom/&amp;gt;5 7&amp;lt;_pom/&amp;gt;3 5&amp;lt;_pom/&amp;gt;5 6&amp;lt;_pom/&amp;gt;2 6&amp;lt;_pom/&amp;gt;6 8&amp;lt;_pom/&amp;gt;4 4&amp;lt;_pom/&amp;gt;4 14&amp;lt;_pom/&amp;gt;4 0&amp;lt;_pom/&amp;gt;2 17&amp;lt;_pom/&amp;gt;5 0&amp;lt;_pom/&amp;gt;1&lt;br /&gt;
      {(⍺≤≈⍵)&amp;gt;⍺&amp;lt;≈⍵}/sd&lt;br /&gt;
0 0 0 0 0 0 0 0 0 1 0 0 0 &lt;br /&gt;
      {(⍺≥≈⍵)&amp;gt;⍺&amp;gt;≈⍵}/sd&lt;br /&gt;
0 0 0 0 0 0 0 0 0 0 1 0 0 &lt;br /&gt;
      {⍺&amp;lt;≈⍵}/sd&lt;br /&gt;
0 0 0 0 0 0 0 0 0 0 0 1 0 &lt;br /&gt;
      {⍺&amp;gt;≈⍵}/sd&lt;br /&gt;
0 0 0 0 0 0 0 0 0 0 0 0 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Finally, the following example shows that the &#039;&#039;&#039;Sample Data&#039;&#039;&#039; are all distinct:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
      {⍺∘≈⍵}/sd&lt;br /&gt;
0 1 ¯1 2 ¯2 3 ¯3 4 ¯4 5 ¯5 6 ¯6&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Hypercomplex Ball Arithmetic==&lt;br /&gt;
&lt;br /&gt;
Ball Arithmetic also extends to all Hypercomplex numbers (Complex, Quaternion, and Octonion) such as &amp;lt;apll&amp;gt;1.2&amp;lt;_pom/&amp;gt;&amp;lt;_i/&amp;gt;2.2&amp;lt;/apll&amp;gt; which represents a Complex Ball Arithmetic number whose &#039;&#039;&#039;Real&#039;&#039;&#039; part is &amp;lt;apll&amp;gt;1.2&amp;lt;_pom/&amp;gt;&amp;lt;/apll&amp;gt; and whose &#039;&#039;&#039;Imaginary&#039;&#039;&#039; part is &amp;lt;apll&amp;gt;2.2&amp;lt;_pom/&amp;gt;&amp;lt;/apll&amp;gt;.  Note that the display of that number (at &amp;lt;apll&amp;gt;53&amp;lt;/apll&amp;gt; bits of precision)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
      1.2&amp;lt;_pom/&amp;gt;&amp;lt;_i/&amp;gt;2.2&lt;br /&gt;
1.2&amp;lt;_pom/&amp;gt;2.2&amp;lt;_E/&amp;gt;¯16&amp;lt;_i/&amp;gt;2.2&amp;lt;_pom/&amp;gt;4.4&amp;lt;_E/&amp;gt;¯16&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
demonstrates the inexactness of both floating point coefficients.&lt;br /&gt;
&lt;br /&gt;
==Small v. Large Radii==&lt;br /&gt;
&lt;br /&gt;
Ball Arithmetic works best when given small Radii, that is, small relative to the Midpoint.  Calculations on large Radii numbers such as &amp;lt;apll&amp;gt;0&amp;lt;_i/&amp;gt;0.5&amp;lt;_pom/&amp;gt;0.5&amp;lt;/apll&amp;gt; don&#039;t always produce useful results.  For example,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
      ⎕PP←8             ⍝ To reduce fractional clutter&lt;br /&gt;
      x←0&amp;lt;_i/&amp;gt;0.5&amp;lt;_pom/&amp;gt;0.5&lt;br /&gt;
      √x&lt;br /&gt;
0.4267767&amp;lt;_pom/&amp;gt;0.57&amp;lt;_i/&amp;gt;0&amp;lt;_pom/&amp;gt;1.4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Unfortunately in this case, because the Radius is so large it overwhelms the Midpoint, as can be seen when we Square the Square Root:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
      (√x)*2&lt;br /&gt;
0.18213835&amp;lt;_pom/&amp;gt;2.8&amp;lt;_i/&amp;gt;0&amp;lt;_pom/&amp;gt;2.8&lt;br /&gt;
      x=(√x)*2&lt;br /&gt;
0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These calculations work better using smaller Radii, such as&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
      y←0&amp;lt;_i/&amp;gt;0.5&amp;lt;_pom/&amp;gt;0.5&amp;lt;_E/&amp;gt;¯30&lt;br /&gt;
      √y&lt;br /&gt;
0.5&amp;lt;_pom/&amp;gt;2.5&amp;lt;_E/&amp;gt;¯31&amp;lt;_i/&amp;gt;0.5&amp;lt;_pom/&amp;gt;7.5&amp;lt;_E/&amp;gt;¯31&lt;br /&gt;
      (√y)*2&lt;br /&gt;
0&amp;lt;_pom/&amp;gt;1&amp;lt;_E/&amp;gt;¯30&amp;lt;_i/&amp;gt;0.5&amp;lt;_pom/&amp;gt;1&amp;lt;_E/&amp;gt;¯30 &lt;br /&gt;
      y=(√y)*2&lt;br /&gt;
1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where Square Root now returns a meaningful result, and its Square returns the original value.&lt;br /&gt;
&lt;br /&gt;
==Mixed Notation==&lt;br /&gt;
&lt;br /&gt;
The notation for Ball Arithmetic may be combined with other Point Notations in many ways, such as&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
      1&amp;lt;_p/&amp;gt;1&amp;lt;_pom/&amp;gt;&lt;br /&gt;
3.141592653589793&amp;lt;_pom/&amp;gt;4.4&amp;lt;_E/&amp;gt;¯16 &lt;br /&gt;
      1&amp;lt;_x/&amp;gt;1&amp;lt;_pom/&amp;gt;&lt;br /&gt;
2.718281828459045&amp;lt;_pom/&amp;gt;4.5&amp;lt;_E/&amp;gt;¯16&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For more details about combining different forms of Point Notation, see [[Point_Notation|Point Notation]] and in particular the section on [[Point_Notation#Mixed_Notation|Mixed Notation]].&lt;br /&gt;
&lt;br /&gt;
==Implementation==&lt;br /&gt;
&lt;br /&gt;
===Datataypes===&lt;br /&gt;
&lt;br /&gt;
This feature adds four new datatypes to the language:  one each for the four Division Algebras.  Note that marking any one of the Hypercomplex coefficients as a Ball automatically marks them all as Balls.&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|Real||&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;apll&amp;gt;23&amp;lt;_pom/&amp;gt;&amp;lt;/apll&amp;gt; or &amp;lt;apll&amp;gt;1.2&amp;lt;_pom/&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Complex||&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;apll&amp;gt;23&amp;lt;_i/&amp;gt;1.2&amp;lt;_pom/&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Quaternion||&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;apll&amp;gt;23&amp;lt;_i/&amp;gt;1.2&amp;lt;_j/&amp;gt;0.5&amp;lt;_k/&amp;gt;¯3.14&amp;lt;_pom/&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Octonion||&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;apll&amp;gt;23&amp;lt;_i/&amp;gt;1.2&amp;lt;_j/&amp;gt;0.5&amp;lt;_k/&amp;gt;¯3.14&amp;lt;l/&amp;gt;¯3&amp;lt;_ij/&amp;gt;19&amp;lt;_jk/&amp;gt;¯3&amp;lt;_kl/&amp;gt;6&amp;lt;_pom/&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Primitive Functions===&lt;br /&gt;
&lt;br /&gt;
As described above, this feature adds two new monadic primitive functions &#039;&#039;&#039;Contract&#039;&#039;&#039; (&amp;lt;apll&amp;gt;≤R&amp;lt;/apll&amp;gt;) and its inverse &#039;&#039;&#039;Distract&#039;&#039;&#039; (&amp;lt;apll&amp;gt;≥R&amp;lt;/apll&amp;gt;), along with one new monadic primitive operator &#039;&#039;&#039;DoubleTilde&#039;&#039;&#039; &amp;lt;apll&amp;gt;f≈ R&amp;lt;/apll&amp;gt; and &amp;lt;apll&amp;gt;L f≈ R&amp;lt;/apll&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
All primitive and system functions and operators are extended to work with Ball Arithmetic, so you can test out this feature on all algorithms, with the exception of trying to find the Factorial of a multiple-precision/Ball Arithmetic Hypercomplex number, in which case you are temporarily out of luck.&lt;br /&gt;
&lt;br /&gt;
==Workspace Version Number==&lt;br /&gt;
&lt;br /&gt;
For the moment, if you save a workspace which contains a Ball Arithmetic number in a variable, the workspace version number is &amp;lt;apll&amp;gt;0.03&amp;lt;/apll&amp;gt;.  Otherwise, the version number is &amp;lt;apll&amp;gt;0.02&amp;lt;/apll&amp;gt;.  Workspaces with Ball Arithmetic Numbers may not be loaded by an earlier version of the interpreter.&lt;br /&gt;
&lt;br /&gt;
==Pending Design Decisions==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;The direct comparison functions (&amp;lt;apll&amp;gt;&amp;amp;lt;≤=≥&amp;amp;gt;≠≡≢&amp;lt;/apll&amp;gt;) and indirect ones (&amp;lt;apll&amp;gt;⍳⍸∊⍷⍒⍋&amp;lt;/apll&amp;gt;) are currently implemented to compare the Midpoints of the arguments ignoring the Radius &amp;amp;mdash; this may change.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;The Floor function and its related functions (Ceiling, Residue, GCD, LCM, and Encode) are currently implemented to execute on the Midpoints of the arguments ignoring the Radius &amp;amp;mdash; this may change.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;We need new primitives to describe the different ways in which Balls can intersect/overlap, possibly through a new monadic operator (perhaps &amp;amp;#x2248;) on the existing direct and indirect comparison and Floor-related functions.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Certain primitives are defined on limited ranges, and sometimes multiple ranges where it might use different algorithms for different ranges (e.g. &amp;lt;apll&amp;gt;L!R&amp;lt;/apll&amp;gt;).  There are open questions about how to handle a Ball that spans two or more of these ranges as to how to calculate the result.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Infinity and NaN have not been given any special treatment as yet.  The results are whatever ARB has chosen which we may need to override.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Download==&lt;br /&gt;
&lt;br /&gt;
This feature is available as an Alpha release &amp;amp;mdash; it may be downloaded from the [http://www.nars2000.org/download/binaries/alpha/ Alpha] release directory.&lt;br /&gt;
&lt;br /&gt;
==Acknowledgements==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;The Arb team has contributed their Ball Arithmetic&amp;lt;ref name=&amp;quot;BallArithmetic&amp;quot; /&amp;gt; code which made this feature possible.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;David Rabenhorst has contributed many very useful ideas and many hours debugging the implementation.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Drab</name></author>
	</entry>
	<entry>
		<id>https://wiki.nars2000.org/index.php?title=System_Variable_FPC&amp;diff=3369</id>
		<title>System Variable FPC</title>
		<link rel="alternate" type="text/html" href="https://wiki.nars2000.org/index.php?title=System_Variable_FPC&amp;diff=3369"/>
		<updated>2018-10-26T09:58:16Z</updated>

		<summary type="html">&lt;p&gt;Drab: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;h1&amp;gt;&amp;lt;aplxx&amp;gt;⎕FPC&amp;lt;/aplxx&amp;gt; - Floating Point Control&amp;lt;/h1&amp;gt;&lt;br /&gt;
{{BoxStart|&amp;lt;apll&amp;gt;Z←⎕FPC&amp;lt;/apll&amp;gt;&lt;br /&gt;
|returns the current value of the Floating Point Control precision.}}&lt;br /&gt;
{{BoxEnd|&amp;lt;apll&amp;gt;Z&amp;lt;/apll&amp;gt; is an integer scalar that represents the current value of the number of bits of precision used for [[Rational and VFP Numbers|Multiple-Precision Floating Point numbers]].}}&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; rules=&amp;quot;none&amp;quot; summary=&amp;quot;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
||&amp;lt;apll&amp;gt;⎕FPC←R&amp;lt;/apll&amp;gt;&lt;br /&gt;
||sets the value of the Floating Point Control precision to &amp;lt;apll&amp;gt;R&amp;lt;/apll&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
||&amp;lt;apll&amp;gt;⎕FPC←⍬&amp;lt;/apll&amp;gt;&lt;br /&gt;
||sets the value of the Floating Point Control precision to its system default state.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The approximate number of digits of precision for a given value of &amp;lt;apll&amp;gt;⎕FPC&amp;lt;/apll&amp;gt; is about &amp;lt;apll&amp;gt;10⍟2*⎕FPC&amp;lt;/apll&amp;gt;. The value of &amp;lt;apll&amp;gt;⎕FPC&amp;lt;/apll&amp;gt; for a given required precision is about &amp;lt;apll&amp;gt;⌈2⍟10*digits&amp;lt;/apll&amp;gt;.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;The minimum value for &amp;lt;apll&amp;gt;⎕FPC&amp;lt;/apll&amp;gt; is &amp;lt;apll&amp;gt;1&amp;lt;/apll&amp;gt;; the maximum value is the largest positive 32-bit integer &amp;lt;apll&amp;gt;2147483647&amp;lt;/apll&amp;gt;.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;The system default value is &amp;lt;apll&amp;gt;128&amp;lt;/apll&amp;gt;.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;For example, (note: these numbers are normally one long string of digits; they are broken here, with the break shown by &#039;&#039;&#039;(continued)&#039;&#039;&#039; for your convenience in reading)&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
      ⎕PP←240 &lt;br /&gt;
      ⎕FPC←64  ⋄ *1x &lt;br /&gt;
2.7182818284590452354 &lt;br /&gt;
      ⎕FPC←128 ⋄ *1x &lt;br /&gt;
2.71828182845904523536028747135266249776 &lt;br /&gt;
      ⎕FPC←256 ⋄ *1x &lt;br /&gt;
2.71828182845904523536028747135266249775724709369995957496696762 (Continued) &lt;br /&gt;
772407663035355&lt;br /&gt;
      ⎕FPC←512 ⋄ *1x &lt;br /&gt;
2.71828182845904523536028747135266249775724709369995957496696762 (Continued) &lt;br /&gt;
7724076630353547594571382178525166427427466391932003059921817413 (Continued) &lt;br /&gt;
5966290435729003342952605956 &lt;br /&gt;
      ⎕FPC←1024 ⋄ *1x &lt;br /&gt;
2.71828182845904523536028747135266249775724709369995957496696762 (Continued) &lt;br /&gt;
7724076630353547594571382178525166427427466391932003059921817413 (Continued) &lt;br /&gt;
5966290435729003342952605956307381323286279434907632338298807531 (Continued) &lt;br /&gt;
9525101901157383418793070215408914993488416750924&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Whereas, according to Wolfram Alpha, the exact value to 230 digits is&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;2.71828182845904523536028747135266249775724709369995957496696762 (Continued)&lt;br /&gt;
7724076630353547594571382178525166427427466391932003059921817413 (Continued)&lt;br /&gt;
5966290435729003342952605956307381323286279434907632338298807531 (Continued)&lt;br /&gt;
9525101901157383418793070215408914993488...&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;See Also: [[System_Variable_CT|Comparison Tolerance ⎕CT]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{System Variables}}&lt;br /&gt;
{{Article footer}}&lt;/div&gt;</summary>
		<author><name>Drab</name></author>
	</entry>
	<entry>
		<id>https://wiki.nars2000.org/index.php?title=System_Variable_FPC&amp;diff=3368</id>
		<title>System Variable FPC</title>
		<link rel="alternate" type="text/html" href="https://wiki.nars2000.org/index.php?title=System_Variable_FPC&amp;diff=3368"/>
		<updated>2018-10-26T09:56:39Z</updated>

		<summary type="html">&lt;p&gt;Drab: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;h1&amp;gt;&amp;lt;aplxx&amp;gt;⎕FPC&amp;lt;/aplxx&amp;gt; - Floating Point Control&amp;lt;/h1&amp;gt;&lt;br /&gt;
{{BoxStart|&amp;lt;apll&amp;gt;Z←⎕FPC&amp;lt;/apll&amp;gt;&lt;br /&gt;
|returns the current value of the Floating Point Control precision.}}&lt;br /&gt;
{{BoxEnd|&amp;lt;apll&amp;gt;Z&amp;lt;/apll&amp;gt; is an integer scalar that represents the current value of the number of bits of precision used for [[Rational and VFP Numbers|Multiple-Precision Floating Point numbers]].}}&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; rules=&amp;quot;none&amp;quot; summary=&amp;quot;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
||&amp;lt;apll&amp;gt;⎕FPC←R&amp;lt;/apll&amp;gt;&lt;br /&gt;
||sets the value of the Floating Point Control precision to &amp;lt;apll&amp;gt;R&amp;lt;/apll&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
||&amp;lt;apll&amp;gt;⎕FPC←⍬&amp;lt;/apll&amp;gt;&lt;br /&gt;
||sets the value of the Floating Point Control precision to its system default state.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The approximate number of digits of precision for a given value of ⎕FPC is about 10⍟2*⎕FPC. The value of ⎕FPC for a given required precision is about ⌈2⍟10*digits.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;The minimum value for &amp;lt;apll&amp;gt;⎕FPC&amp;lt;/apll&amp;gt; is &amp;lt;apll&amp;gt;1&amp;lt;/apll&amp;gt;; the maximum value is the largest positive 32-bit integer &amp;lt;apll&amp;gt;2147483647&amp;lt;/apll&amp;gt;.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;The system default value is &amp;lt;apll&amp;gt;128&amp;lt;/apll&amp;gt;.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;For example, (note: these numbers are normally one long string of digits; they are broken here, with the break shown by &#039;&#039;&#039;(continued)&#039;&#039;&#039; for your convenience in reading)&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
      ⎕PP←240 &lt;br /&gt;
      ⎕FPC←64  ⋄ *1x &lt;br /&gt;
2.7182818284590452354 &lt;br /&gt;
      ⎕FPC←128 ⋄ *1x &lt;br /&gt;
2.71828182845904523536028747135266249776 &lt;br /&gt;
      ⎕FPC←256 ⋄ *1x &lt;br /&gt;
2.71828182845904523536028747135266249775724709369995957496696762 (Continued) &lt;br /&gt;
772407663035355&lt;br /&gt;
      ⎕FPC←512 ⋄ *1x &lt;br /&gt;
2.71828182845904523536028747135266249775724709369995957496696762 (Continued) &lt;br /&gt;
7724076630353547594571382178525166427427466391932003059921817413 (Continued) &lt;br /&gt;
5966290435729003342952605956 &lt;br /&gt;
      ⎕FPC←1024 ⋄ *1x &lt;br /&gt;
2.71828182845904523536028747135266249775724709369995957496696762 (Continued) &lt;br /&gt;
7724076630353547594571382178525166427427466391932003059921817413 (Continued) &lt;br /&gt;
5966290435729003342952605956307381323286279434907632338298807531 (Continued) &lt;br /&gt;
9525101901157383418793070215408914993488416750924&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Whereas, according to Wolfram Alpha, the exact value to 230 digits is&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;2.71828182845904523536028747135266249775724709369995957496696762 (Continued)&lt;br /&gt;
7724076630353547594571382178525166427427466391932003059921817413 (Continued)&lt;br /&gt;
5966290435729003342952605956307381323286279434907632338298807531 (Continued)&lt;br /&gt;
9525101901157383418793070215408914993488...&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;See Also: [[System_Variable_CT|Comparison Tolerance ⎕CT]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{System Variables}}&lt;br /&gt;
{{Article footer}}&lt;/div&gt;</summary>
		<author><name>Drab</name></author>
	</entry>
	<entry>
		<id>https://wiki.nars2000.org/index.php?title=Find&amp;diff=2909</id>
		<title>Find</title>
		<link rel="alternate" type="text/html" href="https://wiki.nars2000.org/index.php?title=Find&amp;diff=2909"/>
		<updated>2016-12-04T15:51:16Z</updated>

		<summary type="html">&lt;p&gt;Drab: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;apll&amp;gt;&lt;br /&gt;
Z←L⍷R&lt;br /&gt;
&amp;lt;/apll&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt; &amp;lt;b&amp;gt;Find&amp;lt;/b&amp;gt; looks for patterns &amp;lt;apll&amp;gt;L&amp;lt;/apll&amp;gt; in &amp;lt;apll&amp;gt;R&amp;lt;/apll&amp;gt;.&lt;br /&gt;
&amp;lt;br&amp;gt; It returns a simple boolean array with the same shape as &amp;lt;apll&amp;gt;R&amp;lt;/apll&amp;gt;.&lt;br /&gt;
&amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;apll&amp;gt;L&amp;lt;/apll&amp;gt; and &amp;lt;apll&amp;gt;R&amp;lt;/apll&amp;gt; are arbitrary arrays.&lt;br /&gt;
But to be useful,&lt;br /&gt;
the rank of &amp;lt;apll&amp;gt;L&amp;lt;/apll&amp;gt;&lt;br /&gt;
should not be more than the rank of &amp;lt;apll&amp;gt;R&amp;lt;/apll&amp;gt;,&lt;br /&gt;
and both arguments should have the same type&lt;br /&gt;
(either both character or both numeric).&lt;br /&gt;
&amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
If &amp;lt;apll&amp;gt;L&amp;lt;/apll&amp;gt; is a scalar,&lt;br /&gt;
then &amp;lt;apll&amp;gt;Z←L⍷R ←→ R∊L&amp;lt;/apll&amp;gt;.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
If &amp;lt;apll&amp;gt;L&amp;lt;/apll&amp;gt; is not a scalar,&lt;br /&gt;
then it represents a contiguous pattern,&lt;br /&gt;
which may or may not be found in one or more places in &amp;lt;apll&amp;gt;R&amp;lt;/apll&amp;gt;.&lt;br /&gt;
&amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
If the arguments are numeric,&lt;br /&gt;
then the result is sensitive to &amp;lt;apll&amp;gt;⎕CT&amp;lt;/apll&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
Examples:&lt;br /&gt;
&amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt; &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; R←3 8⍴&#039;thirteenfourteenfifteen &#039;&lt;br /&gt;
&amp;lt;br/&amp;gt; &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; R&lt;br /&gt;
&amp;lt;br/&amp;gt; thirteen&lt;br /&gt;
&amp;lt;br/&amp;gt; fourteen&lt;br /&gt;
&amp;lt;br/&amp;gt; fifteen&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt; &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; &#039;t&#039;⍷R&lt;br /&gt;
&amp;lt;br/&amp;gt; 1 0 0 0 1 0 0 0&lt;br /&gt;
&amp;lt;br/&amp;gt; 0 0 0 0 1 0 0 0&lt;br /&gt;
&amp;lt;br/&amp;gt; 0 0 0 1 0 0 0 0&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt; &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; &#039;teen&#039;⍷R&lt;br /&gt;
&amp;lt;br/&amp;gt; 0 0 0 0 1 0 0 0&lt;br /&gt;
&amp;lt;br/&amp;gt; 0 0 0 0 1 0 0 0&lt;br /&gt;
&amp;lt;br/&amp;gt; 0 0 0 1 0 0 0 0&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/apll&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Drab</name></author>
	</entry>
	<entry>
		<id>https://wiki.nars2000.org/index.php?title=Find&amp;diff=2908</id>
		<title>Find</title>
		<link rel="alternate" type="text/html" href="https://wiki.nars2000.org/index.php?title=Find&amp;diff=2908"/>
		<updated>2016-12-03T13:12:00Z</updated>

		<summary type="html">&lt;p&gt;Drab: Created page with &amp;quot;&amp;lt;apll&amp;gt; Z←L⍷R &amp;lt;/apll&amp;gt; &amp;lt;p&amp;gt; &amp;lt;br&amp;gt; &amp;lt;b&amp;gt;Find&amp;lt;/b&amp;gt; looks for patterns &amp;lt;apll&amp;gt;R&amp;lt;/apll&amp;gt; in &amp;lt;apll&amp;gt;L&amp;lt;/apll&amp;gt;. &amp;lt;br&amp;gt; It returns a simple boolean array with the same shape as &amp;lt;apll&amp;gt;L&amp;lt;/apll&amp;gt;...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;apll&amp;gt;&lt;br /&gt;
Z←L⍷R&lt;br /&gt;
&amp;lt;/apll&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt; &amp;lt;b&amp;gt;Find&amp;lt;/b&amp;gt; looks for patterns &amp;lt;apll&amp;gt;R&amp;lt;/apll&amp;gt; in &amp;lt;apll&amp;gt;L&amp;lt;/apll&amp;gt;.&lt;br /&gt;
&amp;lt;br&amp;gt; It returns a simple boolean array with the same shape as &amp;lt;apll&amp;gt;L&amp;lt;/apll&amp;gt;.&lt;br /&gt;
&amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;apll&amp;gt;L&amp;lt;/apll&amp;gt; and &amp;lt;apll&amp;gt;R&amp;lt;/apll&amp;gt; are arbitrary arrays.&lt;br /&gt;
But to be useful,&lt;br /&gt;
the rank of &amp;lt;apll&amp;gt;R&amp;lt;/apll&amp;gt;&lt;br /&gt;
should not be more than the rank of &amp;lt;apll&amp;gt;L&amp;lt;/apll&amp;gt;,&lt;br /&gt;
and both arguments should have the same type&lt;br /&gt;
(either both character or both numeric).&lt;br /&gt;
&amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
If &amp;lt;apll&amp;gt;R&amp;lt;/apll&amp;gt; is a scalar,&lt;br /&gt;
then &amp;lt;apll&amp;gt;Z←L⍷R ←→ L∊R&amp;lt;/apll&amp;gt;.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
If &amp;lt;apll&amp;gt;R&amp;lt;/apll&amp;gt; is not a scalar,&lt;br /&gt;
then it represents a contiguous pattern,&lt;br /&gt;
which may or may not be found in one or more places in &amp;lt;apll&amp;gt;L&amp;lt;/apll&amp;gt;.&lt;br /&gt;
&amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
If the arguments are numeric,&lt;br /&gt;
then the result is sensitive to &amp;lt;apll&amp;gt;⎕CT&amp;lt;/apll&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
Examples:&lt;br /&gt;
&amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt; &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; L←3 8⍴&#039;thirteenfourteenfifteen &#039;&lt;br /&gt;
&amp;lt;br/&amp;gt; &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; L&lt;br /&gt;
&amp;lt;br/&amp;gt; thirteen&lt;br /&gt;
&amp;lt;br/&amp;gt; fourteen&lt;br /&gt;
&amp;lt;br/&amp;gt; fifteen&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt; &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; L⍷&#039;t&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt; 1 0 0 0 1 0 0 0&lt;br /&gt;
&amp;lt;br/&amp;gt; 0 0 0 0 1 0 0 0&lt;br /&gt;
&amp;lt;br/&amp;gt; 0 0 0 1 0 0 0 0&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt; &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; L⍷&#039;teen&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt; 0 0 0 0 1 0 0 0&lt;br /&gt;
&amp;lt;br/&amp;gt; 0 0 0 0 1 0 0 0&lt;br /&gt;
&amp;lt;br/&amp;gt; 0 0 0 1 0 0 0 0&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/apll&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Drab</name></author>
	</entry>
	<entry>
		<id>https://wiki.nars2000.org/index.php?title=Compose&amp;diff=2907</id>
		<title>Compose</title>
		<link rel="alternate" type="text/html" href="https://wiki.nars2000.org/index.php?title=Compose&amp;diff=2907"/>
		<updated>2016-12-01T13:56:58Z</updated>

		<summary type="html">&lt;p&gt;Drab: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In the following descriptions, &amp;lt;apll&amp;gt;&amp;lt;i&amp;gt;f&amp;lt;/i&amp;gt;&amp;lt;/apll&amp;gt; and &amp;lt;apll&amp;gt;&amp;lt;i&amp;gt;g&amp;lt;/i&amp;gt;&amp;lt;/apll&amp;gt; represent functions and &amp;lt;apll&amp;gt;&amp;lt;i&amp;gt;a&amp;lt;/i&amp;gt;&amp;lt;/apll&amp;gt; and &amp;lt;apll&amp;gt;&amp;lt;i&amp;gt;b&amp;lt;/i&amp;gt;&amp;lt;/apll&amp;gt; represent variables.&lt;br /&gt;
&lt;br /&gt;
* The form &amp;lt;apll&amp;gt;&amp;lt;i&amp;gt;f&amp;lt;/i&amp;gt;∘&amp;lt;i&amp;gt;g&amp;lt;/i&amp;gt;&amp;lt;/apll&amp;gt; may be used both monadically and dyadically.&lt;br /&gt;
:&lt;br /&gt;
:Monadic:  &amp;lt;apll&amp;gt;Z←&amp;lt;i&amp;gt;f&amp;lt;/i&amp;gt;∘&amp;lt;i&amp;gt;g&amp;lt;/i&amp;gt;R&amp;lt;/apll&amp;gt; is identical to &amp;lt;apll&amp;gt;Z←&amp;lt;i&amp;gt;f&amp;lt;/i&amp;gt;&amp;lt;i&amp;gt;g&amp;lt;/i&amp;gt;R&amp;lt;/apll&amp;gt;.&lt;br /&gt;
:&lt;br /&gt;
:Dyadic:  &amp;lt;apll&amp;gt;Z←L&amp;lt;i&amp;gt;f&amp;lt;/i&amp;gt;∘&amp;lt;i&amp;gt;g&amp;lt;/i&amp;gt;R&amp;lt;/apll&amp;gt; is identical to &amp;lt;apll&amp;gt;Z←L&amp;lt;i&amp;gt;f&amp;lt;/i&amp;gt;&amp;lt;i&amp;gt;g&amp;lt;/i&amp;gt;R&amp;lt;/apll&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* The form &amp;lt;apll&amp;gt;&amp;lt;i&amp;gt;f&amp;lt;/i&amp;gt;∘b&amp;lt;/apll&amp;gt; may be used monadically only.&lt;br /&gt;
:&lt;br /&gt;
:Monadic:  &amp;lt;apll&amp;gt;Z←(&amp;lt;i&amp;gt;f&amp;lt;/i&amp;gt;∘&amp;lt;i&amp;gt;b&amp;lt;/i&amp;gt;) R&amp;lt;/apll&amp;gt; is identical to &amp;lt;apll&amp;gt;Z←R &amp;lt;i&amp;gt;f b&amp;lt;/i&amp;gt;&amp;lt;/apll&amp;gt;.&lt;br /&gt;
:Note that parentheses are required around the function to avoid interpreting &amp;lt;apll&amp;gt;&amp;lt;i&amp;gt;b&amp;lt;/i&amp;gt; R&amp;lt;/apll&amp;gt; as a strand.&lt;br /&gt;
&lt;br /&gt;
* The form &amp;lt;apll&amp;gt;&amp;lt;i&amp;gt;a&amp;lt;/i&amp;gt;∘&amp;lt;i&amp;gt;g&amp;lt;/i&amp;gt;&amp;lt;/apll&amp;gt; may be used monadically only.&lt;br /&gt;
:&lt;br /&gt;
:Monadic:  &amp;lt;apll&amp;gt;Z←&amp;lt;i&amp;gt;a&amp;lt;/i&amp;gt;∘&amp;lt;i&amp;gt;g&amp;lt;/i&amp;gt;R&amp;lt;/apll&amp;gt; is identical to &amp;lt;apll&amp;gt;Z←&amp;lt;i&amp;gt;a g&amp;lt;/i&amp;gt; R&amp;lt;/apll&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* The derived function from the form &amp;lt;apll&amp;gt;&amp;lt;i&amp;gt;a&amp;lt;/i&amp;gt;∘&amp;lt;i&amp;gt;b&amp;lt;/i&amp;gt;&amp;lt;/apll&amp;gt; always signals a &amp;lt;apll&amp;gt;SYNTAX ERROR&amp;lt;/apll&amp;gt;.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Compose can be useful for function assignment (but enclosing parentheses are necessary).&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
For example&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;apll&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;p1←(1∘+¯2∘π) ⍝ 1 more than the Nth prime number&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;p1 ⍳9&amp;lt;br/&amp;gt;&lt;br /&gt;
3 4 6 8 12 14 18 20 24&lt;br /&gt;
&amp;lt;/apll&amp;gt;&lt;/div&gt;</summary>
		<author><name>Drab</name></author>
	</entry>
	<entry>
		<id>https://wiki.nars2000.org/index.php?title=Rational_and_VFP_Numbers&amp;diff=2906</id>
		<title>Rational and VFP Numbers</title>
		<link rel="alternate" type="text/html" href="https://wiki.nars2000.org/index.php?title=Rational_and_VFP_Numbers&amp;diff=2906"/>
		<updated>2016-12-01T12:20:30Z</updated>

		<summary type="html">&lt;p&gt;Drab: /* Conversions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===Introduction===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;Rational numbers&amp;lt;/b&amp;gt; complement the existing 64-bit integer datatype to provide infinite precision (or &amp;lt;apll&amp;gt;WS FULL&amp;lt;/apll&amp;gt;) at the cost of some performance.  Similarly, &amp;lt;b&amp;gt;Variable-precision Floating Point&amp;lt;/b&amp;gt; (VFP) numbers complement the existing 64-bit floating point (IEEE-754) datatype to provide more precision (as much as the user cares to specify) again with some cost in performance.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;There is no separate datatype for infinite precision Integers.  Instead, they are represented as a special case of rational numbers.  In the discussion below, the phrase &amp;lt;b&amp;gt;rational integer&amp;lt;/b&amp;gt; means a rational number whose denominator is one.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;Throughout this discussion the similarity between integer and rational numbers as well as floating point and VFP numbers will become apparent.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Rationale===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Simply put:  precision.  If the 53 bits of precision in the floating point result of, say, &amp;lt;apll&amp;gt;2÷3&amp;lt;/apll&amp;gt; is not enough, you now have two more choices:  one as an exact number, and one as a binary floating point number with as much precision as you care to specify.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;For example,&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;⎕PP←60 ⋄ ⎕FPC←512&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2÷3&amp;lt;br /&amp;gt;&lt;br /&gt;
0.6666666666666666&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2÷3x&amp;lt;br /&amp;gt;&lt;br /&gt;
2r3&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2÷3v&amp;lt;br /&amp;gt;&lt;br /&gt;
0.666666666666666666666666666666666666666666666666666666666667&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2*200&amp;lt;br /&amp;gt;&lt;br /&gt;
1.6069380442589903E60&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2*200x&amp;lt;br /&amp;gt;&lt;br /&gt;
1606938044258990275541962092341162602522202993782792835301376&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;○1&amp;lt;br /&amp;gt;&lt;br /&gt;
3.141592653589793&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;○1v&amp;lt;br /&amp;gt;&lt;br /&gt;
3.14159265358979323846264338327950288419716939937510582097494&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Constants===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Rational constants may be entered by suffixing an integer constant with an &amp;lt;apll&amp;gt;x&amp;lt;/apll&amp;gt; (for a rational integer) or separating the numerator and denominator with an &amp;lt;apll&amp;gt;r&amp;lt;/apll&amp;gt; (for a rational number) as follows:&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;apll&amp;gt;123x&amp;lt;/apll&amp;gt; for the constant &amp;lt;apll&amp;gt;123&amp;lt;/apll&amp;gt; (the suffix &amp;lt;apll&amp;gt;x&amp;lt;/apll&amp;gt; is but a shorthand for &amp;lt;apll&amp;gt;r1&amp;lt;/apll&amp;gt;)&lt;br /&gt;
* &amp;lt;apll&amp;gt;123r4567&amp;lt;/apll&amp;gt; for the constant &amp;lt;apll&amp;gt;123÷4567&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;VFP constants may be entered by suffixing the integer or floating point constant with a &amp;lt;apll&amp;gt;v&amp;lt;/apll&amp;gt; as follows:&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;apll&amp;gt;123v&amp;lt;/apll&amp;gt; for the constant &amp;lt;apll&amp;gt;123&amp;lt;/apll&amp;gt;&lt;br /&gt;
* &amp;lt;apll&amp;gt;123.4567v&amp;lt;/apll&amp;gt; for the constant &amp;lt;apll&amp;gt;123.4567&amp;lt;/apll&amp;gt;&lt;br /&gt;
* &amp;lt;apll&amp;gt;123.4567e3v&amp;lt;/apll&amp;gt; for the constant &amp;lt;apll&amp;gt;123.4567e3&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;The above formats for constants (except for the suffix &amp;lt;apll&amp;gt;x&amp;lt;/apll&amp;gt;) may be used in other constants such as &amp;lt;apll&amp;gt;1r4p2&amp;lt;/apll&amp;gt; to generate a shorter and more accurate value for &amp;lt;apll&amp;gt;π&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;/4&amp;lt;/apll&amp;gt; than, say, &amp;lt;apll&amp;gt;((○1)*2)÷4&amp;lt;/apll&amp;gt;.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Precision===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Rational numbers have &amp;lt;b&amp;gt;infinite precision&amp;lt;/b&amp;gt;.  They are stored with a separate numerator and denominator, both of which are exact numbers in the sense that their size (and hence precision) grows limited only by the available workspace.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;VFP numbers have &amp;lt;b&amp;gt;user-controlled variable precision&amp;lt;/b&amp;gt;, and each number may have a different precision.  The default precision at startup is controlled by the value of the system variable &amp;lt;apll&amp;gt;⎕FPC&amp;lt;/apll&amp;gt;.  The system default of this value is &amp;lt;apll&amp;gt;128&amp;lt;/apll&amp;gt; in units of bits of precision of the mantissa (the digits) of the number, not counting the exponent (which is of fixed size).  The current precision may be changed as needed by assigning a new value to the system variable.  All newly created VFP numbers will have the new precision – the precision of VFP numbers already present in the workspace does not change.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Generally, precision is set once for a particular application and unchanged thereafter.  Although not recommended, it is possible to mix VFP numbers of different precisions in a single array – presumably you &amp;lt;b&amp;gt;really&amp;lt;/b&amp;gt; know what you are doing.  The system function &amp;lt;apll&amp;gt;0 ⎕DR&amp;lt;/apll&amp;gt; may be used to display an array&#039;s precision(s).&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Datatype Propagation===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Generally, the datatype of constants propagates through a calculation. That is, if you start with a rational number and don&#039;t calculate with irrational or transcendental functions, you&#039;ll end up with a rational result, and if you start with a VFP number, you&#039;ll end up with a VFP result.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;An example from the programming problems site [http://projecteuler.net/ ProjectEuler.net] illustrates this point.  [http://projecteuler.net/problem=48 Problem #48] asks what are the low-order ten digits of the sum of the first thousand instances of N&amp;lt;sup&amp;gt;N&amp;lt;/sup&amp;gt;?&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;The obvious expression &amp;lt;apll&amp;gt;¯10↑⍕+/*⍨⍳1000&amp;lt;/apll&amp;gt; at first sight seems to solve the problem until you realize that it quickly runs afoul of the limited precision of 64-bit integer and floating point numbers.  Clearly, this is a problem for the infinite precision of rational integers.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;As &amp;lt;apll&amp;gt;⍳1000&amp;lt;/apll&amp;gt; generates the first thousand integers as an integer datatype (actually an Arithmetic Progression Array), &amp;lt;apll&amp;gt;⍳1000x&amp;lt;/apll&amp;gt; generates the same values as rational integers.  Next, &amp;lt;apll&amp;gt;*⍨⍳1000x&amp;lt;/apll&amp;gt; generates the first thousand instances of N&amp;lt;sup&amp;gt;N&amp;lt;/sup&amp;gt; as exact rational integers, and unlike its integer counterpart, there is no overflow to floating point, just an increase in precision (as well as space used in the workspace).  Then, &amp;lt;apll&amp;gt;+/*⍨⍳1000x&amp;lt;/apll&amp;gt; sums them into a single 3001-digit rational integer, and finally &amp;lt;apll&amp;gt;¯10↑⍕+/*⍨⍳1000x&amp;lt;/apll&amp;gt; converts the large integer to characters and extracts the low-order ten digits &amp;amp;mdash; &amp;lt;apll&amp;gt;9110846700&amp;lt;/apll&amp;gt; &amp;amp;mdash; all in a small number of milliseconds.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Note how we started with an obvious expression that failed because of its limited precision, and made a single change to suffix the constant &amp;lt;apll&amp;gt;1000&amp;lt;/apll&amp;gt; with an &amp;lt;apll&amp;gt;x&amp;lt;/apll&amp;gt; to convert it to a rational integer which then propagates through the calculation with infinite precision to yield the correct result.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Display===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Rational integers are displayed as an integer with no special adornment; rational non-integers are displayed as a numerator and denominator separated by an &amp;lt;apll&amp;gt;r&amp;lt;/apll&amp;gt; as in &amp;lt;apll&amp;gt;34r9&amp;lt;/apll&amp;gt;.  As with the integer datatype, the numerator and denominator of a rational number are displayed exactly, unaffected by the current setting for Printing Precision (&amp;lt;apll&amp;gt;⎕PP&amp;lt;/apll&amp;gt;).&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;!40&amp;lt;br /&amp;gt;&lt;br /&gt;
8.159152832478977E47&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;!40x&amp;lt;br /&amp;gt;&lt;br /&gt;
815915283247897734345611269596115894272000000000&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;+\÷⍳10x&amp;lt;br /&amp;gt;&lt;br /&gt;
1 3r2 11r6 25r12 137r60 49r20 363r140 761r280 7129r2520 7381r2520&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;VFP numbers are displayed as decimal numbers to the precision inherent in the number or &amp;lt;apll&amp;gt;⎕PP&amp;lt;/apll&amp;gt;, whichever is smaller, just as floating point numbers are displayed.  For example,&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;⎕PP←100&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;⎕FPC←64&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;○1&amp;lt;br /&amp;gt;&lt;br /&gt;
3.141592653589793&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;○1x&amp;lt;br /&amp;gt;&lt;br /&gt;
3.14159265358979323851&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;⎕FPC←128&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;○1x&amp;lt;br /&amp;gt;&lt;br /&gt;
3.141592653589793238462643383279502884195&amp;lt;/apll&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;where both of the above displays were limited by the precision of the number, not &amp;lt;apll&amp;gt;⎕PP&amp;lt;/apll&amp;gt;.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;However, the first of the following displays &amp;lt;b&amp;gt;is&amp;lt;/b&amp;gt; limited by &amp;lt;apll&amp;gt;⎕PP&amp;lt;/apll&amp;gt;:&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;⎕FPC←128&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;⎕PP←20&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;!40v&amp;lt;br /&amp;gt;&lt;br /&gt;
81591528324789773435____________________________&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;⎕PP←80&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;!40v&amp;lt;br /&amp;gt;&lt;br /&gt;
8159152832478977343456112695961158942720________&amp;lt;/apll&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;In the last display, the current setting of Printing Precision is large enough, but the current setting of the Floating Point Control (&amp;lt;apll&amp;gt;⎕FPC&amp;lt;/apll&amp;gt;) whose value is in bits is too small, so the display is truncated.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Formatted Display===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;The system function &amp;lt;apll&amp;gt;⎕FMT&amp;lt;/apll&amp;gt; has been enhanced to allow formatting of rational numbers via the (new) &amp;lt;apll&amp;gt;R&amp;lt;/apll&amp;gt;-format specifier.  For example,&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&#039;R4.2&#039; ⎕FMT ∘.÷⍨⍳6x&amp;lt;br /&amp;gt;&lt;br /&gt;
1 &amp;amp;nbsp;&amp;amp;nbsp;1r2 1r3 1r4 1r5 1r6 &amp;lt;br /&amp;gt;&lt;br /&gt;
2 &amp;amp;nbsp;&amp;amp;nbsp;1 &amp;amp;nbsp;&amp;amp;nbsp;2r3 1r2 2r5 1r3 &amp;lt;br /&amp;gt;&lt;br /&gt;
3 &amp;amp;nbsp;&amp;amp;nbsp;3r2 1 &amp;amp;nbsp;&amp;amp;nbsp;3r4 3r5 1r2 &amp;lt;br /&amp;gt;&lt;br /&gt;
4 &amp;amp;nbsp;&amp;amp;nbsp;2 &amp;amp;nbsp;&amp;amp;nbsp;4r3 1 &amp;amp;nbsp;&amp;amp;nbsp;4r5 2r3 &amp;lt;br /&amp;gt;&lt;br /&gt;
5 &amp;amp;nbsp;&amp;amp;nbsp;5r2 5r3 5r4 1 &amp;amp;nbsp;&amp;amp;nbsp;5r6 &amp;lt;br /&amp;gt;&lt;br /&gt;
6 &amp;amp;nbsp;&amp;amp;nbsp;3 &amp;amp;nbsp;&amp;amp;nbsp;2 &amp;amp;nbsp;&amp;amp;nbsp;3r2 6r5 1  &amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Moreover, the Symbol Substitution (&amp;lt;apll&amp;gt;S&amp;amp;lt;…&amp;amp;gt;&amp;lt;/apll&amp;gt;) feature of &amp;lt;apll&amp;gt;⎕FMT&amp;lt;/apll&amp;gt; allows you to substitute a different symbol for the default &amp;lt;apll&amp;gt;r&amp;lt;/apll&amp;gt; used to separate the numerator and denominator of a rational number, as in&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&#039;S&amp;amp;lt;r/&amp;amp;gt;R4.2&#039; ⎕FMT ∘.÷⍨⍳6x&amp;lt;br /&amp;gt;&lt;br /&gt;
1 &amp;amp;nbsp;&amp;amp;nbsp;1/2 1/3 1/4 1/5 1/6 &amp;lt;br /&amp;gt;&lt;br /&gt;
2 &amp;amp;nbsp;&amp;amp;nbsp;1 &amp;amp;nbsp;&amp;amp;nbsp;2/3 1/2 2/5 1/3 &amp;lt;br /&amp;gt;&lt;br /&gt;
3 &amp;amp;nbsp;&amp;amp;nbsp;3/2 1 &amp;amp;nbsp;&amp;amp;nbsp;3/4 3/5 1/2 &amp;lt;br /&amp;gt;&lt;br /&gt;
4 &amp;amp;nbsp;&amp;amp;nbsp;2 &amp;amp;nbsp;&amp;amp;nbsp;4/3 1 &amp;amp;nbsp;&amp;amp;nbsp;4/5 2/3 &amp;lt;br /&amp;gt;&lt;br /&gt;
5 &amp;amp;nbsp;&amp;amp;nbsp;5/2 5/3 5/4 1 &amp;amp;nbsp;&amp;amp;nbsp;5/6 &amp;lt;br /&amp;gt;&lt;br /&gt;
6 &amp;amp;nbsp;&amp;amp;nbsp;3 &amp;amp;nbsp;&amp;amp;nbsp;2 &amp;amp;nbsp;&amp;amp;nbsp;3/2 6/5 1  &amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Datatype Promotion===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;For the most part, rational numbers beget rational numbers and VFP numbers beget VFP numbers.  However, when irrational, transcendental, and certain other functions are used, rational numbers beget VFP numbers.  For example,&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;*1&amp;lt;br /&amp;gt;&lt;br /&gt;
2.718281828459045&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;*1x&amp;lt;br /&amp;gt;&lt;br /&gt;
2.718281828459045235360287471352662497759&amp;lt;/apll&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;where the datatype of the two results are floating point and VFP, respectively.  That is, in a manner similar to how some primitive functions with integer arguments may return floating point results, when a rational number is used as an argument to a primitive function that can&#039;t return a result with infinite precision, it returns a VFP number.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;The reason irrational, transcendental, and certain other functions on rational numbers do not return rational numbers is that, by definition, the result of such a function is, in general, not representable as a rational number; instead, VFP numbers are better suited to represent irrational results where the end user may control exactly how much precision is desired in an obviously inexact number.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Two special functions are the prime decomposition (&amp;lt;apll&amp;gt;πR&amp;lt;/apll&amp;gt;)/number theoretic (&amp;lt;apll&amp;gt;LπR&amp;lt;/apll&amp;gt;) functions.  In these cases, fractional or VFP right arguments are converted to integers or rational integers, respectively, which is the datatype of the result except for &amp;lt;apll&amp;gt;0πR&amp;lt;/apll&amp;gt; (Primality Test) which always returns a Boolean result regardless of the type of &amp;lt;apll&amp;gt;R&amp;lt;/apll&amp;gt;.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Ignoring purely structural functions, the list of functions that produce VFP numbers given rational numbers is as follows:&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Power:  &amp;lt;apll&amp;gt;*R&amp;lt;/apll&amp;gt; and &amp;lt;apll&amp;gt;L*R&amp;lt;/apll&amp;gt; (except when &amp;lt;apll&amp;gt;R&amp;lt;/apll&amp;gt; is a 32-bit integer, in which case the result is a rational number)&lt;br /&gt;
* Logarithm:  &amp;lt;apll&amp;gt;⍟R&amp;lt;/apll&amp;gt; and &amp;lt;apll&amp;gt;L⍟R&amp;lt;/apll&amp;gt;&lt;br /&gt;
* Pi Times and Circle functions:  &amp;lt;apll&amp;gt;○R&amp;lt;/apll&amp;gt; and &amp;lt;apll&amp;gt;L○R&amp;lt;/apll&amp;gt;&lt;br /&gt;
* Root:  &amp;lt;apll&amp;gt;√R&amp;lt;/apll&amp;gt; and &amp;lt;apll&amp;gt;L√R&amp;lt;/apll&amp;gt;&lt;br /&gt;
* Factorial and Binomial:  &amp;lt;apll&amp;gt;!R&amp;lt;/apll&amp;gt; and &amp;lt;apll&amp;gt;L!R&amp;lt;/apll&amp;gt; (except when the arguments are rational integers, in which case the result is a rational integer)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Beyond the ones mentioned above, the list of functions that &amp;lt;b&amp;gt;don&#039;t&amp;lt;/b&amp;gt; produce a rational or VFP result given those argument(s) is as follows:&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Depth:  &amp;lt;apll&amp;gt;≡&amp;lt;/apll&amp;gt; (Integer)&lt;br /&gt;
* Dyadic Comparison:  &amp;lt;apll&amp;gt;= ≠ &amp;lt; ≤ ≥ &amp;gt; ≡ ≢&amp;lt;/apll&amp;gt; (Boolean)&lt;br /&gt;
* Nand and Nor:  &amp;lt;apll&amp;gt;⍲ ⍱&amp;lt;/apll&amp;gt; (Boolean)&lt;br /&gt;
* Grade Up/Down:  &amp;lt;apll&amp;gt;⍋ ⍒&amp;lt;/apll&amp;gt; (Integer)&lt;br /&gt;
* Index Of:  &amp;lt;apll&amp;gt;⍳&amp;lt;/apll&amp;gt; (Integer)&lt;br /&gt;
* Member Of:  &amp;lt;apll&amp;gt;∊&amp;lt;/apll&amp;gt; (Boolean)&lt;br /&gt;
* Find:  &amp;lt;apll&amp;gt;⍷&amp;lt;/apll&amp;gt; (Boolean)&lt;br /&gt;
* Subset and Superset:  &amp;lt;apll&amp;gt;⊆ ⊇&amp;lt;/apll&amp;gt; (Boolean)&lt;br /&gt;
* Format:  &amp;lt;apll&amp;gt;⍕&amp;lt;/apll&amp;gt; (Character)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Otherwise, rational argument(s) produce rational result(s) and VFP argument(s) produce VFP result(s).&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Datatype Demotion===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;It is common in APL implementations to demote datatypes where appropriate.  For example, the constant &amp;lt;apll&amp;gt;1.0&amp;lt;/apll&amp;gt; might actually be represented as an integer or even Boolean datatype.  The idea is there is no loss of precision and the storage is typically smaller which might lead to a more efficient algorithm when next used, so why not?&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;With rational and VFP numbers those reasons no longer apply.  While the constant &amp;lt;apll&amp;gt;1x&amp;lt;/apll&amp;gt; might have the same precision as the constant &amp;lt;apll&amp;gt;1.0&amp;lt;/apll&amp;gt;, the difference in latent precision between the two is vast.  In fact, in order for datatype propagation of rational and VFP numbers to work at all, we must be careful &amp;lt;b&amp;gt;not&amp;lt;/b&amp;gt; to demote them automatically to a smaller datatype.  Otherwise, it would require an intolerable degree of analysis on the part of the programmer to ensure that the desired datatype (rational or VFP) remains in effect throughout a calculation.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Conversions===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;To convert manually from one datatype to another,&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Integer to rational, use &amp;lt;apll&amp;gt;0x+&amp;lt;/apll&amp;gt;&lt;br /&gt;
* Integer, floating point, or rational number to VFP, use &amp;lt;apll&amp;gt;0v+&amp;lt;/apll&amp;gt;&lt;br /&gt;
* Rational integer to a 64-bit integer (possibly losing some precision), use &amp;lt;apll&amp;gt;⍎⍕&amp;lt;/apll&amp;gt;&lt;br /&gt;
* Rational non-integer to a floating point number (possibly losing some precision), use &amp;lt;apll&amp;gt;0.0+&amp;lt;/apll&amp;gt;&lt;br /&gt;
* VFP number to a floating point number (possibly losing some precision), use &amp;lt;apll&amp;gt;⍎⍕&amp;lt;/apll&amp;gt;&lt;br /&gt;
* VFP number to rational &amp;amp;mdash; at the moment, no APL method exists although the underlying libraries do have such a function&lt;br /&gt;
&lt;br /&gt;
===Comparisons===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Comparisons between two rational numbers or a rational number and any other integer is exact &amp;amp;mdash; just as they are between integers.&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Comparisons between a rational number and a floating point number convert both arguments to VFP numbers and compare the two as below.&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Comparisons between a VFP number and any other number is sensitive to the current setting of Comparison Tolerance (&amp;lt;apll&amp;gt;⎕CT&amp;lt;/apll&amp;gt;) &amp;amp;mdash; just as they are between floating point numbers.&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;That is, comparisons continue the analogy between integers and rationals as well as floats and VFPs.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Integer Tolerance===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Both rational and VFP numbers may be used where the system ordinarily requires an integer (such axis coordinates, indexing, left argument to structural primitives, etc.) just as the system tolerates floating point numbers in those contexts if they are sufficiently near an integer.  In all cases, the system attempts to convert the non-integer to an integer using the fixed system  comparison tolerance (at the moment, &amp;lt;apll&amp;gt;3E¯15&amp;lt;/apll&amp;gt;).&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Infinities===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Support for &amp;lt;apll&amp;gt;±∞&amp;lt;/apll&amp;gt; has been extended to rational and VFP numbers in the same manner as it applies to 64-bit integers and 64-bit floats.  That is, the same cases covered by the system variable &amp;lt;apll&amp;gt;⎕IC&amp;lt;/apll&amp;gt; (Indeterminate Control) also apply to infinite rational and VFP numbers.  Moreover, infinite numeric constants may be entered, for example, as&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;apll&amp;gt;∞x&amp;lt;/apll&amp;gt;&lt;br /&gt;
* &amp;lt;apll&amp;gt;∞r1&amp;lt;/apll&amp;gt;&lt;br /&gt;
* &amp;lt;apll&amp;gt;∞v&amp;lt;/apll&amp;gt;&lt;br /&gt;
* &amp;lt;apll&amp;gt;∞v0&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Also constants such as &amp;lt;apll&amp;gt;2r∞&amp;lt;/apll&amp;gt; resolve to &amp;lt;apll&amp;gt;0x&amp;lt;/apll&amp;gt;.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===New And/Or Different Behavior===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Both roll (&amp;lt;apll&amp;gt;?R&amp;lt;/apll&amp;gt;) and deal (&amp;lt;apll&amp;gt;L?R&amp;lt;/apll&amp;gt;) on rational integers use a built-in random number generator so as to use the entire range of rational integers – this algorithm uses its own internal seeds that are much more complicated than the simple integer seed that is &amp;lt;apll&amp;gt;⎕RL&amp;lt;/apll&amp;gt; (Random Link).  Thus &amp;lt;apll&amp;gt;⎕RL&amp;lt;/apll&amp;gt; is unchanged by these functions on rationals.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;For example, if you need &amp;lt;b&amp;gt;really&amp;lt;/b&amp;gt; large random numbers&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;?10*60x&amp;lt;br /&amp;gt;&lt;br /&gt;
370857192605742854709703007683731949504799559659692534573173&amp;lt;/apll&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Matrix inverse (&amp;lt;apll&amp;gt;⌹R&amp;lt;/apll&amp;gt;) and matrix division (&amp;lt;apll&amp;gt;L⌹R&amp;lt;/apll&amp;gt;) on rational or VFP arguments each have two limitations above and beyond that of normal conformability:&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;&amp;lt;p&amp;gt;for a square right argument that it be non-singular, and&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;&amp;lt;p&amp;gt;for an overdetermined (&amp;lt;apll&amp;gt;&amp;amp;gt;/⍴R&amp;lt;/apll&amp;gt;) right argument that the symmetric matrix &amp;lt;apll&amp;gt;(⍉R)+.×R&amp;lt;/apll&amp;gt; be non-singular.&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;These limitations are due to the algorithm ([http://en.wikipedia.org/wiki/Gauss%E2%80%93Jordan_elimination Gauss-Jordan Elimination]) used to implement Matrix Inverse/Divide on rational and VFP numbers.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;p&amp;gt;Integer and floating point arguments are not subject to these limitations because they use a more general algorithm ([http://en.wikipedia.org/wiki/Singular_value_decomposition Singular Value Decomposition]) that produces a unique result even for singular arguments (e.g., &amp;lt;apll&amp;gt;⌹5 3⍴0&amp;lt;/apll&amp;gt;).&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Conclusions===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;The new datatypes offer several benefits:&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* They extend the precision of existing integer and floating point datatypes to a much greater level.&lt;br /&gt;
* As integer blows up to floating point, rational blows up to VFP, providing a natural parallel progression for irrational and transcendental primitive functions.&lt;br /&gt;
* There is a close similarity between integer and rational numbers as well as floating point and VFP numbers.&lt;br /&gt;
* Datatype propagation without demotion allows one to code an algorithm in either of the new types easily and without the need for detailed analysis of the datatype in intermediate results.&lt;br /&gt;
* All primitives extend naturally to encompass the new types as numbers.&lt;br /&gt;
* The notation for constants builds on existing point notation formats.&lt;br /&gt;
&lt;br /&gt;
===Acknowledgments===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;The designers of J are thanked for having the foresight to include [http://www.jsoftware.com/help/dictionary/dictg.htm rational numbers] as a separate datatype.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;The following LGPL libraries have been used to provide support for these datatypes:&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* MPIR (Multiple Precision Integers and Rationals) at [http://www.mpir.org mpir.org].&lt;br /&gt;
* MPFR (Multiple Precision Floating-Point Reliable Library ) at [http://www.mpfr.org mpfr.org].&lt;br /&gt;
&lt;br /&gt;
===References===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;For a PDF version of this page, view it [http://www.sudleyplace.com/APL/Rational%20&amp;amp;%20Variable-Precision%20FP.pdf here].&amp;lt;/p&amp;gt;&lt;/div&gt;</summary>
		<author><name>Drab</name></author>
	</entry>
	<entry>
		<id>https://wiki.nars2000.org/index.php?title=Commute-Duplicate&amp;diff=2905</id>
		<title>Commute-Duplicate</title>
		<link rel="alternate" type="text/html" href="https://wiki.nars2000.org/index.php?title=Commute-Duplicate&amp;diff=2905"/>
		<updated>2016-12-01T11:15:03Z</updated>

		<summary type="html">&lt;p&gt;Drab: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;table border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; rules=&amp;quot;none&amp;quot; summary=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&lt;br /&gt;
    &amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; summary=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td valign=&amp;quot;top&amp;quot;&amp;gt;Duplicate: &amp;lt;apll&amp;gt;Z←f⍨ R&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;returns &amp;lt;apll&amp;gt;R f R&amp;lt;/apll&amp;gt;.&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;/table&amp;gt;&lt;br /&gt;
  &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&lt;br /&gt;
    &amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; summary=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td valign=&amp;quot;top&amp;quot;&amp;gt;Commute:  &amp;lt;apll&amp;gt;Z←L f⍨ R&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;returns &amp;lt;apll&amp;gt;R f L&amp;lt;/apll&amp;gt;.&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;/table&amp;gt;&lt;br /&gt;
  &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;L&amp;lt;/apll&amp;gt; and &amp;lt;apll&amp;gt;R&amp;lt;/apll&amp;gt; are arrays.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;f&amp;lt;/apll&amp;gt; is a function.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;For example:&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;×⍨⍳5 ⍝ squares &amp;lt;br/&amp;gt;&lt;br /&gt;
1 4 9 16 25&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;∘.=⍨⍳4 ⍝ Identity matrix&amp;lt;br /&amp;gt;&lt;br /&gt;
1 0 0 0&amp;lt;br /&amp;gt;&lt;br /&gt;
0 1 0 0&amp;lt;br /&amp;gt;&lt;br /&gt;
0 0 1 0&amp;lt;br /&amp;gt;&lt;br /&gt;
0 0 0 1&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2*⍨⍳5 ⍝ squares &amp;lt;br/&amp;gt;&lt;br /&gt;
1 4 9 16 25&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;√+/2*⍨6 2⍴3 4, 5 12, 8 15, 7 24, 20 21, 12 35 ⍝ Pythagorean hypotenuses&amp;lt;br /&amp;gt;&lt;br /&gt;
5 13 17 25 29 37&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;/apll&amp;gt;&lt;/div&gt;</summary>
		<author><name>Drab</name></author>
	</entry>
</feed>