using System.Collections.Generic;
public static readonly Dictionary<int, decimal> DecimalErrors = new();
public static readonly Dictionary<int, double> DoubleErrors = new();
public static readonly Dictionary<int, float> FloatErrors = new();
public static void Main()
const int minFraction = 2;
const int maxFraction = 1000;
decimal totalFractions = maxFraction-minFraction+1;
for(int fraction = 2; fraction <= maxFraction; fraction++)
CalculateErrors(fraction);
Out of all fractions 1/n where n is values {minFraction}-{maxFraction} or a total of {totalFractions} fractions
decimal had {DecimalErrors.Count} errors ({DecimalErrors.Count/totalFractions:P})
double had {DoubleErrors.Count} errors ({DoubleErrors.Count/totalFractions:P})
float had {FloatErrors.Count} errors ({FloatErrors.Count/totalFractions:P})
public static void CalculateErrors(int fraction)
var dec = Test(Decimal, 1m, fraction);
var dbl = Test(Double, 1d, fraction);
var flt = Test(Float, 1f, fraction);
DecimalErrors[fraction] = dec;
DoubleErrors[fraction] = dbl;
FloatErrors[fraction] = flt;
public static T Test<T>(Func<T, T, T> f, T initial, int fraction)
var y = (T)Convert.ChangeType(fraction, typeof(T));
for(int i = 0; i < fraction; i++)
public static decimal Decimal(decimal x, decimal y)
public static double Double(double x, double y)
public static float Float(float x, float y)