source: git/factory/cf_util.cc @ 86aa4d5

spielwiese
Last change on this file since 86aa4d5 was a8af6a8, checked in by Martin Lee <martinlee84@…>, 12 years ago
chg: new command igcd to compute integer gcd
  • Property mode set to 100644
File size: 1.0 KB
Line 
1/* emacs edit mode for this file is -*- C++ -*- */
2/* $Id$ */
3
4//{{{ docu
5//
6// cf_util.cc - miscellaneous functions, not necessarily related
7//   to canonical forms.
8//
9// Used by: fac_cantzass.cc, gfops.cc
10//
11//}}}
12
13#include "config.h"
14
15//{{{ int ipower ( int b, int m )
16//{{{ docu
17//
18// ipower() - calculate b^m in standard integer arithmetic.
19//
20// Note: Beware of overflows.
21//
22//}}}
23int ipower ( int b, int m )
24{
25    int prod = 1;
26
27    while ( m != 0 )
28    {
29        if ( m % 2 != 0 )
30            prod *= b;
31        m /= 2;
32        if ( m != 0 )
33            b *= b;
34    }
35    return prod;
36}
37//}}}
38
39int ilog2 (int a)
40{
41  int n = -1;
42  while ( a > 0 )
43  {
44    n++;
45    a /=2;
46  }
47  return n;
48}
49
50int igcd( int a, int b )
51{
52    if ( a < 0 ) a = -a;
53    if ( b < 0 ) b = -b;
54
55    int c;
56
57    while ( b != 0 )
58    {
59        c = a % b;
60        a = b;
61        b = c;
62    }
63    return a;
64}
65
66#include<stdio.h>
67#include<stdlib.h>
68
69void factoryError_intern(const char *s)
70{
71  fputs(s,stderr);
72  abort();
73}
74void (*factoryError)(const char *s) = factoryError_intern;
75
76
Note: See TracBrowser for help on using the repository browser.