using System;
using System.Collections.Generic;
using System.Text;
namespace ConstanteNeperDos
{
class Program
{
/// <summary>
/// Fonction par algorithme récursif de factoriel
/// </summary>
/// <param name="n">Nombre dont on veux la factoriel</param>
/// <returns>renvoie le résultat</returns>
public static double factoriel(double n)
{
if (n <= 1) return 1;
else
{
return n *= factoriel(n - 1);
}
}
/// <summary>
/// Calcul d'un nombre exposant d'un nombre réel (pour l'utilisation d'un algo de calcul de la constante de Neper)
/// </summary>
/// <param name="n">Choix du nombre</param>
/// <param name="exp">Choix de l'exposant en nombre réel (Strictement positif)</param>
/// <returns>retourne le résultat</returns>
public static double exposant(double n, double exp)
{
int i = 0;
double resultat = n;
while (i < exp)
{
resultat *= n;
i++;
}
return resultat / n;
}
/// <summary>
/// Fonction calculant la constante de Neper
/// </summary>
/// <param name="precision">Nombre de boucles pour la précision</param>
/// <returns>renvoie le résultat</returns>
public static double neperFacto(double precision)
{
double n = 1;
double resultat = 1;
while (n < precision)
{
resultat += 1 / factoriel(n);
n++;
}
return resultat;
}
/// <summary>
/// Fonction moins précise et plus lente pour obtenir une partie de e
/// </summary>
/// <param name="precision">Niveau de précision souhaité</param>
/// <returns>renvoie le résultat</returns>
public static double neperPeuPrecis(double precision)
{
return exposant(1 + 1 / precision, precision);
}
static void Main(string[] args)
{
Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine("Constante de Neper avec un développement de E en série");
Console.ForegroundColor = ConsoleColor.Cyan;
Console.WriteLine(neperFacto(20));
Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine("Constante de Neper avec Math.E");
Console.ForegroundColor = ConsoleColor.Yellow;
Console.WriteLine(Math.E);
Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine("Constante de Neper par une fonction lente et peu efficace");
Console.ForegroundColor = ConsoleColor.Magenta;
Console.WriteLine(neperPeuPrecis(100000000).ToString(".########"));
Console.ReadKey();
}
}
}