sqrt algorithm

Torbjörn Granlund tg at gmplib.org
Fri Aug 14 20:01:26 UTC 2015

"Marco Bodrato" <bodrato at mail.dm.unipi.it> writes:

  I prefer 'do while', whenever the initial branch can be saved.
That makes sense.

  > I agree with saving variables which are simultaneously alive.  In this
  > code, n and i are not simultaneously alive.
  I like symmetry, eg:
    h += up[n] * v0 +    mpn_mul_1 (rp, up, n, v0);
    h += up[n] * v0 + mpn_addmul_1 (rp, up, n, v0);
  but you are right, we have to please compilers, not aesthetic ;-)
I recall to have attempted that, but I didn't want to extend the live
range of a critical variable...

  Interesting observation, by writing "h += A + B" we suggest to the
  compiler that A and B can be computed in any order; when we write "h += A;
  h += B;" we warn the compiler: computing A may have effects on computing
I suppose it used to suggest a bad order, while now it suggests a good
eval order.  (While the initial separate statements means there was a
"sequence point" in C parlance, the compiler may reorder things as the
call can not modify the local expression's result.)

  A better mullo_basecase will improve the overall speed of sqrlo_dc, then
  maybe the speed of sqrt...

A truly good mullo_basecase is written in assembly, of course  :-)

Please encrypt, key id 0xC8601622

More information about the gmp-devel mailing list