git » metnum-tp1.git » commit 9c68c71

Agregar otra implementacion de funciones continuas

author Rodrigo Campos
2010-09-05 23:36:30 UTC
committer Alberto Bertogli
2010-09-06 21:26:42 UTC
parent 2505b3ae20ff83b748b99c23371721f9ad5ccee2

Agregar otra implementacion de funciones continuas

En esta implementacion de fcont no resolemos las fracciones hasta la ultima
iteracion. Hacemos todas las cuentas en el numerador/denominador usando la clase
numero.

Makefile +5 -2
fcont_int.cpp +53 -0

diff --git a/Makefile b/Makefile
index 7e0a7e6..0d16f31 100644
--- a/Makefile
+++ b/Makefile
@@ -3,8 +3,7 @@ CXXFLAGS += -Wall -std=c++98 -pedantic -Wno-long-long
 
 OBJS = aritmetica.o
 
-default: calc babilonio binomial fcont binomial_inc binomial_dec
-
+default: calc babilonio binomial fcont fcont_int binomial_inc binomial_dec 
 all: default
 
 calc: $(OBJS) calc.o
@@ -16,6 +15,9 @@ babilonio: $(OBJS) babilonio.o
 fcont: $(OBJS) fcont.o
 	$(CXX) $(CXXFLAGS) $^ -o $@
 
+fcont_int: $(OBJS) fcont_int.o
+	$(CXX) $(CXXFLAGS) $^ -o $@
+
 binomial: $(OBJS) binomial.o
 	$(CXX) $(CXXFLAGS) $^ -o $@
 
@@ -30,6 +32,7 @@ clean:
 	rm -f calc.o calc
 	rm -f babilonio.o babilonio
 	rm -f fcont.o fcont
+	rm -f fcont_int.o fcont_int
 	rm -f binomial.o binomial
 	rm -f binomial_inc binomial_inc.o
 	rm -f binomial_dec binomial_dec.o
diff --git a/fcont_int.cpp b/fcont_int.cpp
new file mode 100644
index 0000000..18d1177
--- /dev/null
+++ b/fcont_int.cpp
@@ -0,0 +1,53 @@
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include "aritmetica.hpp"
+#include <utility>
+
+using namespace std;
+
+int prec;
+
+pair<numero, numero> a_0(void)
+{
+	return pair<numero, numero> (numero(prec, 1), numero(prec, 2));
+}
+
+pair<numero, numero> siguiente(pair<numero, numero> ant)
+{
+	numero ant_b = ant.first;
+	numero ant_c = ant.second;
+
+	pair<numero, numero> ret;
+	ret.first = ant_c;
+	ret.second = (2 * ant_c) + ant_b;
+
+	return ret;
+}
+
+int main(int argc, char *argv[])
+{
+	if (argc != 3) {
+		printf("Uso: %s <prec> <nterm>\n", argv[0]);
+		return 1;
+	}
+
+	prec = atoi(argv[1]);
+	int nterm = atoi(argv[2]);
+
+	pair<numero, numero> a_i = a_0();
+
+	/* Loop de la fracción, nterm - 1 términos ya que el último es
+	 * distinto */
+	for (int i = 0; i < nterm; i++) {
+		a_i = siguiente(a_i);
+	}
+
+	numero n = (a_i.first / a_i.second) + 1;
+	printf("%.60f 0x%" print_64t "x\n", n.to_double(), to_u64(n));
+
+	return 0;
+}
+
+