//Converts an Algo Rational to an Algo Float. public static BigFloat RationalToFloat(AlgoValue rational) { BigInteger numerator = ((BigRational)rational.Value).FractionalPart.Numerator; BigInteger denominator = ((BigRational)rational.Value).FractionalPart.Denominator; return(BigFloat.Divide(new BigFloat(numerator), new BigFloat(denominator))); }
private static flo SumOfDigits(flo num) { flo sum = 0; while (num > 0) { sum += num % 10; num = num.Divide(10).Floor(); } return(sum); }
public XY(BigInteger p, BigInteger q, BigInteger n, BigInteger totient, int x, int y) { X = x; Y = y; N = n; P = p; Q = q; Totient = totient; Ratio = BigFloat.Divide(Totient, N); Diff = double.Parse(BigInteger.Subtract(N, Totient).ToString()); NDynamic = BigInteger.Parse(N.ToString().Substring(Y)); TotDynamic = BigInteger.Parse(Totient.ToString().Substring(Y)); NDouble = double.Parse(NDynamic.ToString()); TotDouble = double.Parse(TotDynamic.ToString()); }
public static void WriteToTxt(List <BalancedNumber> numbers, bool extended) { StreamWriter writer = new StreamWriter(File.Open(basePath + (extended ? "Balanced Numbers Extended.txt" : "Balanced Numbers.txt"), FileMode.OpenOrCreate)); int i = 0; foreach (BalancedNumber bn in numbers) { writer.WriteLine("Balanced number #{0}", i + 1); writer.WriteLine("\tNumber: {0}", bn.number.ToString()); if (extended) { writer.WriteLine("\t Digit Count: {0}", GetDigits(bn.number).ToString()); WritePrimeFactors(bn.PrimeFactors.number, writer); } writer.WriteLine("\tSideNum: {0}", bn.sideSum.ToString()); if (extended) { writer.WriteLine("\t Digit Count: {0}", GetDigits(bn.sideSum).ToString()); WritePrimeFactors(bn.PrimeFactors.sideSum, writer); } writer.WriteLine("\tK: {0}", bn.k.ToString()); if (extended) { writer.WriteLine("\t Digit Count: {0}", GetDigits(bn.k).ToString()); WritePrimeFactors(bn.PrimeFactors.k, writer); } writer.WriteLine("\tKfactor: {0}", bn.KFactor.ToString()); if (extended) { TestRational(bn.k, bn.PrimeFactors.kFactorNumerator, bn.number, bn.PrimeFactors.kFactorDenominator, writer); } if (i < numbers.Count - 1) { BigFloat floatn = bn.number; BigFloat quoitent = BigFloat.Divide(numbers[i + 1].number, floatn, AccuracyGoal.Absolute(floatn.BinaryPrecision), RoundingMode.TowardsNearest); writer.WriteLine("\tnFactor to next: {0}", quoitent.ToString()); writer.WriteLine(); } else { writer.WriteLine("\tnFactor to next: N/A\n"); } i++; } writer.Flush(); }
public Dictionary <string, BigFloat> GetClassScores(int i, bool passZeroProbs) { // Github Link: https://github.com/Osinko/BigFloat // This method uses BigFloat library for high precision probability calculations // When multiplication of probability values is performed consecutively, the value gets smaller and smaller List <string> uniqueClasses = trainFeatures[columns.Count - 1].Distinct().ToList();// Gets unique classes string classColumn = columns.Keys.Last(); Dictionary <string, BigFloat> classScores = new Dictionary <string, BigFloat>(); BigFloat numerator; BigFloat denominator = new BigFloat(0); bool denominatorFlag = false; double eps = 0.00001;// if passZeroProbs is selected, use this value as a probability value // CPT's consist of (part1|part2, prob_value) like strings. Each part has (rule$value) like elements. (rule$value) equals to (rule=value) // Example CPT element: (credit_history$all paid|own_telephone$none, class$bad) foreach (string uqClass in uniqueClasses)// Calculates probability values for each class { string queryP1; string part1, part2; // Creates query according to bayes formula; // P(class=x|test_sample)=(P(test_sample|class=x)P(class=x))/P(test_sample) numerator = new BigFloat(1); foreach (string str in columns.Keys) { if (str == classColumn)// P(class=x) part { part1 = String.Format("{0}${1}", str, uqClass); part2 = ""; } else // P(test_sample|class=x) part { // Creates query from test data infos like '(part1|part2_element1,part2_element2)' part1 = String.Format("{0}${1}|", str, testFeatures[columns[str]][i]); part2 = ""; string[] part2Split = bayesNetStructure[str].Split(','); string splitter = ""; for (int j = 0; j < part2Split.Length; j++) { if (part2Split[j] == classColumn) { part2 += String.Format("{0}{1}${2}", splitter, part2Split[j], uqClass); } else { part2 += String.Format("{0}{1}${2}", splitter, part2Split[j], testFeatures[columns[part2Split[j]]][i]); } splitter = ","; } } queryP1 = part1 + part2; double prob = CPT[str][queryP1];// Gets query's probability values from CPT if (prob == 0 && passZeroProbs) { prob = eps; } numerator = numerator.Multiply(new BigFloat(prob)); } if (!denominatorFlag)// P(test_sample) part { denominatorFlag = true; denominator = new BigFloat(0); foreach (string uqInnerClass in uniqueClasses)// Same calculation process with numerator, one difference is this loop calculates each possibilities for classes { BigFloat tempDenominator = new BigFloat(1); foreach (string str in columns.Keys) { if (str == classColumn)// P(class=x) part { part1 = String.Format("{0}${1}", str, uqInnerClass); part2 = ""; } else // P(test_sample|class=x) part { // Creates query from test data infos like '(part1|part2_element1,part2_element2)' part1 = String.Format("{0}${1}|", str, testFeatures[columns[str]][i]); part2 = ""; string[] part2Split = bayesNetStructure[str].Split(','); string splitter = ""; for (int j = 0; j < part2Split.Length; j++) { if (part2Split[j] == classColumn) { part2 += String.Format("{0}{1}${2}", splitter, part2Split[j], uqInnerClass); } else { part2 += String.Format("{0}{1}${2}", splitter, part2Split[j], testFeatures[columns[part2Split[j]]][i]); } splitter = ","; } } queryP1 = part1 + part2; double prob = CPT[str][queryP1];// Gets query's probability values from CPT if (prob == 0 && passZeroProbs) { prob = eps; } tempDenominator = tempDenominator.Multiply(new BigFloat(prob)); } denominator = denominator.Add(tempDenominator); } } if (denominator == 0) { classScores[uqClass] = 0; } else { classScores[uqClass] = numerator.Divide(denominator); } } return(classScores); }
public override BigFloat Divide( BigFloat dividend, BigFloat divisor) { return(BigFloat.Divide(dividend, divisor)); }
private void GetKFactor() { kFactor = BigFloat.Divide(kFactorRational.Numerator, kFactorRational.Denominator, AccuracyGoal.Absolute(kFactorRational.Numerator.BitCount + 10), RoundingMode.TowardsNegativeInfinity); }