Your could make one up, for integer arithmetic; the method does not work for
floating point.  The method is called low-cost inverse residue codes and is
in Avižienis, A. (1971). Arithmetic Error Codes: Cost and Effectiveness
Studies for Application in Digital System Design. Reliable Computer Systems:
Design and Evaluation. D. P. Siewiorek and R. S. Swarz. Burlington,
Massachusetts, Digital Press: 787-802.  

Complete algorithms for the method are given on pp. 124-129 of Wakerly, J.
(1978). Error Detecting Codes, Self-Checking Circuits and Applications. New
York, New York, North-Holland.

For floating point sqrt you could do a few iterations to Netwon's method to
refine the
result returned by the built-in sqrt routine.  If the refinement and the
result returned from sqrt agree to within a tolerance, then the sqrt routine
works.  Here is a Netwon-Raphson algorithm in Java that is accurate:

public class NewtonRaphsonSqrt {
  
  public double compute(double x, double guess, double tol, int maxIters)
throws IllegalArgumentException
  {
    double retVal = -1;
    int i = 0;
    
    if( (x < 0) || (maxIters < 1) || (tol < Math.ulp(guess)) )
      throw new IllegalArgumentException("An argument is out of range.");
    while( i <= maxIters ){
      double p = guess + (x/guess - guess) / 2;
      if( Math.abs(p - guess) < tol ){
        retVal = Math.abs(p);
        break;
      }
      else{
        ++i;
        guess = p;
      }
    }
    return retVal;
  }
}
public class Test{
public static void main(String[] args) {
    double x = 2.0;
    NewtonRaphsonSqrt nrs = new NewtonRaphsonSqrt();
    try{
      double ans = nrs.compute(x, 1.1, 1e-6, 30);
      System.out.printf("The square root of %f is %f%n", x, ans);
    }catch( IllegalArgumentException e ){
      e.printStackTrace();
      System.exit(4);
    }
    System.exit(0);
  }
}

Your could also Google "square root approximation algorithm" and find
several others.

Charles Elliott

> -----Original Message-----
> From: questions-bounces+elliott.ch=verizon....@lists.ntp.org
> [mailto:questions-bounces+elliott.ch=verizon....@lists.ntp.org] On
> Behalf Of james machado
> Sent: Friday, January 11, 2013 2:15 AM
> To: Charles Swiger
> Cc: david-tay...@blueyonder.co.uk; questions@lists.ntp.org
> Subject: Re: [ntp:questions] Loopstats jitter field mostly zero?
> 
> On Tue, Jan 8, 2013 at 6:01 AM, Charles Swiger <cswi...@mac.com> wrote:
> > Hi--
> >
> > On Jan 8, 2013, at 2:16 AM, David Taylor <david-
> tay...@blueyonder.co.uk.invalid> wrote:
> >> Thanks, Harlan.  I see that a function SQRT() is used, and that this
> function is defined as sqrt() in ntp.h:
> >>
> >>  #define SQRT(x) (sqrt(x))
> >>
> >> I recall seeing /something/ about hardware and software floating
> point support in the Raspberry Pi, that some hardware/firmware/software
> had it and some not.
> >
> > AFAIK, all of the Raspberry Pis are using an ARM1176JZF-S CPU.  The J
> means Jazelle (aka ThumbEE); dunno about the Z; the F means H/W
> floating point (aka VFP); S means the TrustZone Security Extensions:
> >
> >
> http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0301h/in
> dex.html
> >
> >> I wonder whether that might be the cause?  I can't imagine sqrt()
> being broken, but maybe for very small numbers it's wrongly returning
> zero?  Single precision versus double precision?  As you know, I'm well
> out of my depth on this, but could there be a configuration flag to use
> software FP rather than hardware?  I wonder how best to go about
> solving this problem?
> >
> > Well, there are software floating point and H/W testing software
> available which one might use to check:
> >
> > http://www.jhauser.us/arithmetic/TestFloat.html
> > http://www.netlib.org/fp/ (see UCBTEST)
> 
> i've spent the last two days trying to get the UCBTEST to compile on
> the RPi with no luck.  there are some defines the ieee.c file wants
> that I just don't grok.  As far as TestFloat it requires SoftFloat
> which has fallen off the interwebs.  If you have another test you
> would like me to try let me know.
> 
> >
> > Regards,
> > --
> > -Chuck
> >
> > _______________________________________________
> > questions mailing list
> > questions@lists.ntp.org
> > http://lists.ntp.org/listinfo/questions
> 
> james
> _______________________________________________
> questions mailing list
> questions@lists.ntp.org
> http://lists.ntp.org/listinfo/questions

_______________________________________________
questions mailing list
questions@lists.ntp.org
http://lists.ntp.org/listinfo/questions

Reply via email to