git » metnum-tp1.git » commit 7079385

Hacer que el metodo de aproximacion sea una variable estatica de clase

author Rodrigo Campos
2010-09-08 02:13:53 UTC
committer Rodrigo Campos
2010-09-08 02:16:50 UTC
parent 51ffa35a7fe0235d3a3ff0041060d647cb30020a

Hacer que el metodo de aproximacion sea una variable estatica de clase

Faltaria que los programas tomen un parametro (opcional supongo) y la seteen
apropiadamente. Si no la setean, se usa truncamiento por default (como se venia
haciendo)

aritmetica.cpp +11 -11
aritmetica.hpp +5 -5

diff --git a/aritmetica.cpp b/aritmetica.cpp
index 9574083..716a612 100644
--- a/aritmetica.cpp
+++ b/aritmetica.cpp
@@ -63,11 +63,13 @@ double round_up(int prec, double n)
  * Clase nĂºmero
  */
 
-numero::numero(int prec, double real, double (*aprox_meth)(int p, double n))
+/* Por default usamos truncamiento como metodo de aproximacion */
+double (*numero::aprox_m) (int prec, double n) = trunc;
+
+numero::numero(int prec, double real)
 {
 	this->prec = prec;
-	this->aprox_method = aprox_meth;
-	this->real = aprox_method(prec, real);
+	this->real = numero::aprox_m(prec, real);
 }
 
 int numero::get_prec() const
@@ -81,27 +83,25 @@ int numero::get_prec() const
 	numero numero::operator OP (const numero &b) const \
 	{ \
 		return numero(this->prec, \
-				this->aprox_method(this->prec, this->real) \
+				numero::aprox_m(this->prec, this->real) \
 					OP \
-				this->aprox_method(this->prec, b.real), \
-				this->aprox_method); \
+				numero::aprox_m(this->prec, b.real)); \
 	} \
 	\
 	numero numero::operator OP (const double &b) const \
 	{ \
 		return numero(this->prec, \
-				this->aprox_method(this->prec, this->real) \
+				numero::aprox_m(this->prec, this->real) \
 					OP \
-				this->aprox_method(this->prec, b), \
-				this->aprox_method); \
+				numero::aprox_m(this->prec, b)); \
 	} \
 	\
 	numero operator OP (const double &a, const numero &b) \
 	{ \
 		return numero(b.get_prec(), \
-				b.aprox_method(b.get_prec(), a) \
+				numero::aprox_m(b.get_prec(), a) \
 					OP \
-				b.to_double(), b.aprox_method); \
+				b.to_double()); \
 	}
 
 DEF_OP(+)
diff --git a/aritmetica.hpp b/aritmetica.hpp
index 619edd5..b9a5e87 100644
--- a/aritmetica.hpp
+++ b/aritmetica.hpp
@@ -15,8 +15,8 @@ double round_up(int prec, double n);
 class numero
 {
 public:
-	numero(int prec = 52, double real = 0, double (*aprox_meth)(int p,
-				double n) = trunc);
+	numero(int prec = 52, double real = 0);
+
 	// Aritmeticas
 	numero operator + (const numero &b) const;
 	numero operator - (const numero &b) const;
@@ -43,9 +43,9 @@ public:
 	// Devolver la precision
 	int get_prec() const;
 
-	// Metodo usado para aproximar a la precision pedida (truncamiento,
-	// redondeo, etc.)
-	double (*aprox_method) (int prec, double n);
+	/* Metodo usado para aproximar a la presicion pedida (por default es
+	 * truncamiento) */
+	static double (*aprox_m) (int prec, double n);
 
 private:
 	// Precision