/** @(#) mathpos/mathpos.cpp */
#include "mathpos.h"
// array----------------------------------------------------------------------
// vector---------------------------------------------------------------------
/** Convierte un vector de long en float. */
void vectorLongToFloat(long *pLong, float *pFloat, int count) {
int i;
for (i = 0; i < count; ++i) {
pFloat[i] = static_cast<float>( pLong[i] );
}
}
/** Solo usarlo con tipos numericos: int, long, float, double. */
//template <class TC>
void vectorToZero(long *pVector, int count) {
int i;
for (i = 0; i < count; ++i) {
pVector[i] = 0L;
}
}
// math-----------------------------------------------------------------------
/** Si alguno es casi cero, la comparacion es absoluta. En otro caso,
* la diferencia es relativa. Usa SQRT_MACHEPS.
* @return true: Diferencia relativa no significativa. false: otro caso. */
// No hacerlo template, float se convierte automaticamente
bool areAlmostEqual(double a, double b) {
// Caso 0.0 == 0.0
double absDiff;
// Si alguno es casi cero
if ((fabs(a) < SQRT_MACHEPS) || (fabs(b) < SQRT_MACHEPS)) {
absDiff = fabs(b - a); // diferencia absoluta
} else {
absDiff = fabs( (b - a) / b); // diferencia relativa
}
return ( (absDiff < SQRT_MACHEPS) ? true : false);
}
/** Calcula la precision actual de la computadora. */
double calculateMachineps() {
double macheps = 1.0;
do {
macheps /= 2.0;
} while ( (1.0 + macheps) != 1.0);
macheps *= 2.0;
return macheps;
}
/** computes shift value (mu_c) used in modified newton method
* to build Hc = (Nabla^2)(f)(xc) + mu_c * I
* @param l Lower boundaries for the eigenvalues of (Nabla^2)(f)(xc).
* @param u Upper boundaries for the eigenvalues of (Nabla^2)(f)(xc). */
double calculateMu(double l, double u ) {
double m;
if ( fabs(l) >= fabs(u) ) {
m = fabs(l) + MACHEPS;
} else {
m = fabs(u) + MACHEPS;
}
return m;
}
//template <class TObj>
// constructor, ~, friend-----------------------------------------------------
/* Constructor predeterminado. */
/** Construye. */
/* Destructor predeterminado. */
/** Libera recursos. */
// operator-------------------------------------------------------------------
// public---------------------------------------------------------------------
// private--------------------------------------------------------------------
/**
*
* @param
* @param
* @return
* @see paq1.paq2.MyClass#MyMethod(int,Object)
* @throws Exception
*/
// Fin------------------------------------------------------------------------