basix_doc 0.1
int_gcd_helper Struct Reference

#include <int.hpp>

List of all members.

Static Public Member Functions


Detailed Description

Definition at line 447 of file int.hpp.


Member Function Documentation

static I gcd ( const I &  a,
const I &  b 
) [inline, static]

Definition at line 449 of file int.hpp.

References mmx::I().

                                        {
    typedef typename unsigned_of_helper<I>::type U;
    I r0 = a, r1 = b, q, t;
    if ((r0 == 0) && (r1 != 0)) {
      q = (((U) r0) - ((U) r1)) / ((U) r1) + 1;
      t = r0 - q * r1;
      r0 = r1;
      r1 = t;
    }
    while (r1 != 0) {
      q = r0 / r1;
      t = r0 - q * r1;
      r0 = r1;
      r1 = t;
    }
    return r0;
  }
static I gcd ( const I &  a,
const I &  b,
I &  co_a,
I &  co_b 
) [inline, static]

Definition at line 494 of file int.hpp.

References mmx::I().

                                                          {
    typedef typename unsigned_of_helper<I>::type U;
    I r0 = a, r1 = b, co_a0 = 1, co_a1 = 0, co_b0 = 0, co_b1 = 1, q, t;
    if ((r0 == 0) && (r1 != 0)) {
      q = (((U) r0) - ((U) r1)) / ((U) r1) + 1;
      t = r0 - q * r1;
      r0 = r1;
      r1 = t;
      t = co_a1;
      co_a1 = co_a0 - q * co_a1;
      co_a0 = t;
      t = co_b1;
      co_b1 = co_b0 - q * co_b1;
      co_b0 = t;
    }
    while (r1 != 0) {
      q = r0 / r1;
      t = r0 - q * r1;
      r0 = r1;
      r1 = t;
      t = co_a1;
      co_a1 = co_a0 - q * co_a1;
      co_a0 = t;
      t = co_b1;
      co_b1 = co_b0 - q * co_b1;
      co_b0 = t;
    }
    co_a = co_a0;
    co_b = co_b0;
    return r0;
  }
static I gcd ( const I &  a,
const I &  b,
I &  co_a 
) [inline, static]

Definition at line 468 of file int.hpp.

References mmx::I().

                                                 {
    typedef typename unsigned_of_helper<I>::type U;
    I r0 = a, r1 = b, co_a0 = 1, co_a1 = 0, q, t;
    if ((r0 == 0) && (r1 != 0)) {
      q = (((U) r0) - ((U) r1)) / ((U) r1) + 1;
      t = r0 - q * r1;
      r0 = r1;
      r1 = t;
      t = co_a1;
      co_a1 = co_a0 - q * co_a1;
      co_a0 = t;
    }
    while (r1 != 0) {
      q = r0 / r1;
      t = r0 - q * r1;
      r0 = r1;
      r1 = t;
      t = co_a1;
      co_a1 = co_a0 - q * co_a1;
      co_a0 = t;
    }
    co_a = co_a0;
    return r0;
  }

The documentation for this struct was generated from the following file:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines