Statistics
| Branch: | Tag: | Revision:

root / gnuradio-core / src / lib / general / gr_math.cc @ e4d3b484

History | View | Annotate | Download (2 kB)

1 5d69a524 jcorgan
/* -*- c++ -*- */
2 5d69a524 jcorgan
/*
3 5d69a524 jcorgan
 * Copyright 2003 Free Software Foundation, Inc.
4 5d69a524 jcorgan
 * 
5 5d69a524 jcorgan
 * This file is part of GNU Radio
6 5d69a524 jcorgan
 * 
7 5d69a524 jcorgan
 * GNU Radio is free software; you can redistribute it and/or modify
8 5d69a524 jcorgan
 * it under the terms of the GNU General Public License as published by
9 937b719d eb
 * the Free Software Foundation; either version 3, or (at your option)
10 5d69a524 jcorgan
 * any later version.
11 5d69a524 jcorgan
 * 
12 5d69a524 jcorgan
 * GNU Radio is distributed in the hope that it will be useful,
13 5d69a524 jcorgan
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 5d69a524 jcorgan
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 5d69a524 jcorgan
 * GNU General Public License for more details.
16 5d69a524 jcorgan
 * 
17 5d69a524 jcorgan
 * You should have received a copy of the GNU General Public License
18 5d69a524 jcorgan
 * along with GNU Radio; see the file COPYING.  If not, write to
19 86f5c924 eb
 * the Free Software Foundation, Inc., 51 Franklin Street,
20 86f5c924 eb
 * Boston, MA 02110-1301, USA.
21 5d69a524 jcorgan
 */
22 5d69a524 jcorgan
23 5d69a524 jcorgan
#ifdef HAVE_CONFIG_H
24 5d69a524 jcorgan
#include <config.h>
25 5d69a524 jcorgan
#endif
26 5d69a524 jcorgan
27 5d69a524 jcorgan
#include <gr_math.h>
28 5d69a524 jcorgan
#include <math.h>
29 5d69a524 jcorgan
30 5d69a524 jcorgan
/*
31 5d69a524 jcorgan
 * Greatest Common Divisor, using Euclid's algorithm.
32 5d69a524 jcorgan
 * [There are faster algorithms.  See Knuth 4.5.2 if you care]
33 5d69a524 jcorgan
 */
34 5d69a524 jcorgan
35 5d69a524 jcorgan
long
36 5d69a524 jcorgan
gr_gcd (long m, long n)
37 5d69a524 jcorgan
{
38 5d69a524 jcorgan
  if (m < 0)
39 5d69a524 jcorgan
    m = -m;
40 5d69a524 jcorgan
  
41 5d69a524 jcorgan
  if (n < 0)
42 5d69a524 jcorgan
    n = -n;
43 5d69a524 jcorgan
44 5d69a524 jcorgan
  while (n != 0){
45 5d69a524 jcorgan
    long        t = m % n;
46 5d69a524 jcorgan
    m = n;
47 5d69a524 jcorgan
    n = t;
48 5d69a524 jcorgan
  }
49 5d69a524 jcorgan
50 5d69a524 jcorgan
  return m;
51 5d69a524 jcorgan
}
52 5d69a524 jcorgan
53 5d69a524 jcorgan
54 5d69a524 jcorgan
/*
55 5d69a524 jcorgan
 * These really need some configure hacking to figure out the right answer.
56 5d69a524 jcorgan
 * As a stop gap, try for a macro, and if not that, then try std::
57 5d69a524 jcorgan
 */
58 5d69a524 jcorgan
59 5d69a524 jcorgan
// returns a non-zero value if value is "not-a-number" (NaN), and 0 otherwise
60 5d69a524 jcorgan
61 5d69a524 jcorgan
#if defined(isnan) || !defined(CXX_HAS_STD_ISNAN)
62 5d69a524 jcorgan
63 5d69a524 jcorgan
int 
64 5d69a524 jcorgan
gr_isnan (double value)
65 5d69a524 jcorgan
{
66 5d69a524 jcorgan
  return isnan (value);
67 5d69a524 jcorgan
}
68 5d69a524 jcorgan
69 5d69a524 jcorgan
#else
70 5d69a524 jcorgan
71 5d69a524 jcorgan
int 
72 5d69a524 jcorgan
gr_isnan (double value)
73 5d69a524 jcorgan
{
74 5d69a524 jcorgan
  return std::isnan (value);
75 5d69a524 jcorgan
}
76 5d69a524 jcorgan
77 5d69a524 jcorgan
#endif
78 5d69a524 jcorgan
79 5d69a524 jcorgan
// returns a non-zero value if the value of x has its sign bit set.
80 5d69a524 jcorgan
//
81 5d69a524 jcorgan
// This  is  not  the  same  as `x < 0.0', because IEEE 754 floating point
82 5d69a524 jcorgan
// allows zero to be signed.  The comparison `-0.0 < 0.0'  is  false,  but
83 5d69a524 jcorgan
// `gr_signbit (-0.0)' will return a nonzero value.
84 5d69a524 jcorgan
85 5d69a524 jcorgan
#ifdef signbit
86 5d69a524 jcorgan
87 5d69a524 jcorgan
int 
88 5d69a524 jcorgan
gr_signbit (double x)
89 5d69a524 jcorgan
{
90 5d69a524 jcorgan
  return signbit (x);
91 5d69a524 jcorgan
}
92 5d69a524 jcorgan
93 5d69a524 jcorgan
#else
94 5d69a524 jcorgan
95 5d69a524 jcorgan
int 
96 5d69a524 jcorgan
gr_signbit (double x)
97 5d69a524 jcorgan
{
98 5d69a524 jcorgan
  return std::signbit (x);
99 5d69a524 jcorgan
}
100 5d69a524 jcorgan
101 5d69a524 jcorgan
102 5d69a524 jcorgan
#endif