/usr/include/givaro/givpower.h is in libgivaro-dev 3.2.13-1.2.
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 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 | // ==========================================================================
// file: givpowers.h
// Time-stamp: <28 Feb 08 14:17:46 Jean-Guillaume.Dumas@imag.fr>
// (c) 1999 Givaro Team
// ==========================================================================
#ifndef _GIVARO_POWER_H_
#define _GIVARO_POWER_H_
// -------------------------------------------------------------
// Powering
// -------------------------------------------------------------
template<class TT, class UU> TT power(const TT n, const UU l) {
if (l == 0) return 1 ;
unsigned long p = l ;
short is_assg = 0 ;
TT res = TT(1) ;
TT puiss = n ;
while (p != 0) {
if (p & 0x1) {
if (is_assg)
res *= puiss ;
else {
is_assg = 1 ;
res = puiss ;
}
}
if ((p >>= 1) != 0) puiss = puiss * puiss ;
}
return res ;
}
/*
#include <givaro/givinteger.h>
template<> Integer power(const Integer n, const long l) { return pow(n,l); }
template<> Integer power(const Integer n, const unsigned long l) { return pow(n,l); }
template<> Integer power(const Integer n, const int l) { return pow(n,l); }
template<> Integer power(const Integer n, const unsigned int l) { return pow(n,l); }
*/
template<class D, class TT> TT& dom_power(TT& res, const TT& n, long l, const D& F) {
if (l == 0) return res = F.one ;
unsigned long p = l ;
short is_assg = 0 ;
TT puiss = n, tmp ;
res = F.one ;
while (p != 0) {
if (p & 0x1) {
if (is_assg)
F.mulin(res,puiss) ;
else {
is_assg = 1 ;
res = puiss ;
}
}
if ((p >>= 1) != 0) { F.mul(tmp,puiss,puiss) ; puiss = tmp; }
}
return res ;
}
/*
#include <math.h>
template<> double power<double>(const double a, const double e) {
return pow(a,e);
}
*/
#endif
|