Pregunta

He intentado escribir el siguiente programa en C # para calcular pi utilizando recursividad infinita, pero sigo recibiendo confundido acerca de la división de enteros / doble / decimal.

Realmente no tengo idea de por qué esto no está funcionando, así que perdón por mi falta de comprensión de la materia inflexible, ya que todavía estoy aprendiendo C #.

Gracias de antemano!

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        public static int Main(string[] args)
        {
            int numeratornext = 2;
            int denominatornext = 5;

            decimal findto = 100.0M;
            decimal pi = 0.0M;
            decimal halfpi = 1.0M;
            int seriesnum = 1;
            int seriesden = 3;

            for (int i = 0; i < findto; i++)
            {
                halfpi += Decimal.Divide((decimal)seriesnum, (decimal)seriesden);
                //System.Console.WriteLine(Decimal.Divide((decimal)seriesnum, (decimal)seriesden).ToString());
                seriesnum *= numeratornext;
                seriesden *= denominatornext;
                numeratornext++;
                denominatornext += 2;
            }

            pi = halfpi * 2;

            System.Console.WriteLine(pi.ToString());
            System.Console.ReadLine();
            return 0;
        }
    }
}
¿Fue útil?

Solución

Su confusión surge porque usted está utilizando int y decimal, ambos de los cuales son más adecuados para los números enteros o cálculos financieros precisión fijo. Mi sugerencia sería simplemente declarar todos de sus variables numéricas como double aquí, lo que eliminará cualquier ambigüedad sobre lo que los tipos de los valores de retorno son, ya que cualquier operación matemática en dos dobles resultados en otro doble.

(Aparte de esto, el algoritmo es incorrecto. Sin embargo, la injusticia de su algoritmo es una cuestión independiente de los tipos que se está usando.)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top