Ahora les traigo dos algoritmos que permiten calcular cifras del PI, totalmente hecho en C#. Utilizo las clases para calcular muchísimas cifras, que publiqué en un post anterior, y a pesar de no ser óptima va a permitir calcular unas cuantas cifras decimales. Para calcular el PI voy a utilizar dos algoritmos distintos. Primer algoritmo: (Gauss-Legendre) private static string CalculoPI1(int desp) { int cifras = 1 << desp; int coma = cifras - (8 * 2); NumeroG a = new NumeroG(cifras, coma); NumeroG b = new NumeroG(cifras, coma); NumeroG t = new NumeroG(cifras, coma); NumeroG p = new NumeroG(cifras, coma); NumeroG a1 = new NumeroG(cifras, coma); NumeroG b1 = new NumeroG(cifras, coma); NumeroG t1 = new NumeroG(cifras, coma); NumeroG p1 = new NumeroG(cifras, coma); NumeroG aux1 = new NumeroG(cifras, coma); NumeroG aux2 = new NumeroG(cifras, coma); NumeroG dos = new NumeroG(cifras, coma); //Estado inicial dos.Asigna(2);//constante a.Asigna(1); aux1.Asigna(2); aux2.RaizCuadrada(aux1); b.Divide(a, aux2); aux1.Asigna(4); t.Divide(a, aux1); p.Asigna(1); //Cálculo de la serie int repeticion = desp;//número de repeticiones for (int i = 0; i < repeticion; i++) { aux1.Suma(a, b); a1.Divide(aux1, dos); aux1.Multiplica(a, b); b1.RaizCuadrada(aux1); aux1.Resta(a, a1); aux2.Multiplica(aux1, aux1); aux1.Multiplica(p, aux2); t1.Resta(t, aux1); p.DesplazamientoAlaIzquierda(1);//multiplica por 2 p1.Copia(p); a.Copia(a1); b.Copia(b1); t.Copia(t1); p.Copia(p1); } //Termina el cálculo aux1.Suma(a, b); aux2.Multiplica(aux1, aux1); t.DesplazamientoAlaIzquierda(2);//multiplica por 4 p.Divide(aux2, t); string PI = (new CodigoDCB(p)).ToString(); return PI; } Segundo algoritmo: (Borwein) private static string CalculoPI2(int desp) { int cifras = 1 << desp; int coma = cifras - (8 * 2); NumeroG a = new NumeroG(cifras, coma); NumeroG y = new NumeroG(cifras, coma); NumeroG a1 = new NumeroG(cifras, coma); NumeroG y1 = new NumeroG(cifras, coma); NumeroG aux1 = new NumeroG(cifras, coma); NumeroG aux2 = new NumeroG(cifras, coma); NumeroG aux3 = new NumeroG(cifras, coma); NumeroG dos = new NumeroG(cifras, coma); NumeroG uno = new NumeroG(cifras, coma); //Estado inicial dos.Asigna(2);//constante uno.Asigna(1);//constante aux1.RaizCuadrada(dos); y.Resta(aux1, uno); aux1.DesplazamientoAlaIzquierda(2); aux2.Asigna(6); a.Resta(aux2, aux1); //Cálculo de la serie int repeticion = desp >> 1;//número de repeticiones for (int i = 0; i < repeticion; i++) { aux1.Multiplica(y, y); aux2.Multiplica(aux1, aux1); aux1.Resta(uno, aux2); aux2.RaizCuadrada(aux1); aux1.RaizCuadrada(aux2); aux2.Resta(uno, aux1); aux3.Suma(uno, aux1); y1.Divide(aux2, aux3); aux1.Suma(uno, y1); aux2.Multiplica(y1, y1); aux3.Suma(aux1, aux2); aux2.Multiplica(y1, aux3); aux3.Multiplica(aux1, aux1); aux1.Multiplica(aux3, aux3); aux3.Multiplica(a, aux1); aux2.DesplazamientoAlaIzquierda((i << 1) + 3); a1.Resta(aux3, aux2); a.Copia(a1); y.Copia(y1); } //Termina el cálculo y.Divide(uno, a); string PI = (new CodigoDCB(y)).ToString(); return PI; } En el main va lo siguiente static void Main(string[] args) { Console.WriteLine("Calculando cifras del PI ..."); int desplazamiento = 13;//Carga la cantidad de cifras, //13 indica 2 a la 13 = 8000 cifras binarias string pi1 = CalculoPI1(desplazamiento); string pi2 = CalculoPI2(desplazamiento); //Muestras las cifras Console.WriteLine(pi1); Console.WriteLine(pi2); //Calculas las cifras iguales de los dos cálculos. int i = 0; for (; (i < pi1.Length) && (i < pi2.Length); i++) { if (pi1 != pi2) break; } Console.WriteLine(); Console.WriteLine("Cifras del PI: {0}", i - 5); //Detiene el programa Console.ReadLine(); } Una captura del cálculo: Nota: es necesario contar con las clases para calcular muchísimas cifras. ENLACES Clases para calcular muchas cifras en C#, necesario para éste post. Algoritmos para el cálculo del PI Algoritmos Más algoritmos Programa para calcular millones de cifras Descarga
Datos archivados del Taringa! original
0puntos
790visitas
0comentarios
Actividad nueva en Posteamelo
0puntos
5visitas
0comentarios
Dar puntos:

Dejá tu comentario

0/2000

Autor del Post

e
Usuario
Puntos0
Posts12
Ver perfil →
PosteameloArchivo Histórico de Taringa! (2004-2017). Preservando la inteligencia colectiva de la internet hispanohablante.

CONTACTO

18 de Septiembre 455, Casilla 52

Chillán, Región de Ñuble, Chile

Solo correo postal

© 2026 Posteamelo.com. No afiliado con Taringa! ni sus sucesores.

Contenido preservado con fines históricos y culturales.