These are distinct operators that substitute directly for (+),(-),(*),(/) 
in situations where one wants to obtain more of mathematically true result 
than is usually available:

two = 2.0; sqrt2 = sqrt(2);
residualValueRoundedAway = Float64(sqrt(big(2)) - sqrt2) # 
-9.667293313452913e-17
 
mostSignficantPart, leastSignificantPart = eftSqrt(two)
mostSignificantPart ==  1.4142135623730951
leastSignificantPart == -9.667293313452912e-17 # we recover the residual 
value, itself at Float64 precision 

so we obtain the arithmetic result at twice the 'working' precision (in two 
parts, the mspart == the usual result).

exp1log2 = exp(1.0)*log(2.0);                                               
                        #  1.88416938536372
residualValueRoundedAway = Float64(exp(big(1))*log(big(2)) - exp1log2) # 
 8.146538547111741e-17

mostSignficantPart, leastSignificantPart = eftProd2( exp(1.0), log(2.0) )   
# (1.88416938536372, -8.177744937186283e-17)

------
These transformations have the additional benefit that the two parts are 
well separated, they do not overlap in the working precision.
So, in all cases, mostSignificantPart + leastSignificantPart == 
mostSignificantPart.  
They are as well separated as possible, without losing information.

These functions are well-suited to assisting the implementation of extended 
precision Floating Point math.
Another application (that, until otherwise informed, I'll say is from me) 
is to accelerate inline rounding:
  (RoundFast.jl <https://github.com/J-Sarnoff/RoundFast.jl>, there to see 
how).

Assuming one had a Float64 unum-ish capability, a double-double float would 
extend the precision.
(Ultimately, all these parts should meld)


On Wednesday, November 25, 2015 at 9:19:08 AM UTC-5, Tom Breloff wrote:
>
> Thanks Jeffrey. Can you expand on the specifics of the package?  What 
> would you say are the primary use cases? How does this differ from interval 
> arithmetic or Unums?
>
> On Wednesday, November 25, 2015, Jeffrey Sarnoff <jeffrey...@gmail.com 
> <javascript:>> wrote:
>
>> ErrorFreeArith.jl <https://github.com/J-Sarnoff/ErrorFreeArith.jl> offers 
>> error-free transformations not (yet?) included in the ErrorFreeTransforms 
>> package by dsiem.
>>
>> These operations convey the usual arithmetic result accompanied by a 
>> residual value that is usually lost to rounding.
>> This gives the correct value at twice the working precision (correctly 
>> rounded for +,-,*,/; still 1/(1/x) = x or x ± ulp(x)).
>>
>>
>>
>>

Reply via email to