/usr/include/rheolef/gamma.icc is in librheolef-dev 6.5-1+b1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | /// This file is part of Rheolef.
///
/// Copyright (C) 2000-2009 Pierre Saramito
///
/// Rheolef is free software; you can redistribute it and/or modify
/// it under the terms of the GNU General Public License as published by
/// the Free Software Foundation; either version 2 of the License, or
/// (at your option) any later version.
///
/// Rheolef is distributed in the hope that it will be useful,
/// but WITHOUT ANY WARRANTY; without even the implied warranty of
/// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
/// GNU General Public License for more details.
///
/// You should have received a copy of the GNU General Public License
/// along with Rheolef; if not, write to the Free Software
/// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
/// lexer for qmg mesh files
/// =========================================================================
#include <cmath>
#include <cstdlib>
template <class T> T my_gamma (const T& x) {
if (x == T(0)) return 1;
if (x == T(int(x))) {
T value = 1;
for (size_t n = int(x)-1; n > 0; n--)
value *= T(n);
// warning_macro ("gamma(" << x << ") = " << value);
return value;
}
static T sqrt_pi = sqrt(acos(T(-1.)));
if (x == -T(0.5)) return -2*sqrt_pi;
if (x-int(x) == T(0.5)) {
T value = sqrt_pi;
for (size_t n = int(x); n != 0; n--)
value *= (n-0.5);
return value;
}
std::cerr << "gamma: " << x << " is not of integer of half order" << std::endl;
exit (1);
return 0;
}
|