static void TestBigNumberMultinomial(uint maxError, ErrorMeasure errorMeasure) { Dictionary <string, MultinomialResult> tempResults = new Dictionary <string, MultinomialResult>(); Results.AppendLine("Number of arguments Naive Binom Log LogGamma My BigNumber Table"); const uint maxNumber = 1000; uint iteration = 2; ulong result; int prevPermutNumber; ulong prevResult; uint[] prevPermut; int count = 0; do { Results.Append(iteration + "\t"); tempResults.Clear(); prevPermut = null; prevResult = 0; prevPermutNumber = -1; bool bigIsCorrect = true; bool naiveIsCorrect = true; bool binomIsCorrect = true; bool logIsCorrect = true; bool optIsCorrect = true; bool lnGammaIsCorrect = true; bool primeNumbersIsCorrect = true; Console.WriteLine("Arg count: " + iteration); uint[] combination; while ((combination = CombinationWithRepetition.Next(maxNumber, iteration)) != null) { var currentCombintaion = combination.Select(a => a + 1).ToArray(); count++; result = 0; try { result = Multinomial.Big(currentCombintaion); } catch { bigIsCorrect = false; } if (bigIsCorrect) { MultinomCoefMethodTest(currentCombintaion, prevPermut, prevPermutNumber, Multinomial.Naive, ref naiveIsCorrect, result, maxError, errorMeasure, tempResults); MultinomCoefMethodTest(currentCombintaion, prevPermut, prevPermutNumber, Multinomial.Binom, ref binomIsCorrect, result, maxError, errorMeasure, tempResults); MultinomCoefMethodTest(currentCombintaion, prevPermut, prevPermutNumber, Multinomial.Log, ref logIsCorrect, result, maxError, errorMeasure, tempResults); MultinomCoefMethodTest(currentCombintaion, prevPermut, prevPermutNumber, Multinomial.LogGamma, ref lnGammaIsCorrect, result, maxError, errorMeasure, tempResults); MultinomCoefMethodTest(currentCombintaion, prevPermut, prevPermutNumber, Multinomial.My, ref optIsCorrect, result, maxError, errorMeasure, tempResults); MultinomCoefMethodTest(currentCombintaion, prevPermut, prevPermutNumber, Multinomial.PrimeNumbers, ref primeNumbersIsCorrect, result, maxError, errorMeasure, tempResults); prevPermut = (uint[])currentCombintaion.Clone(); prevResult = result; prevPermutNumber++; } else { if (prevPermut != null) { PrintIfCorrect(Multinomial.Naive, prevPermut, prevPermutNumber, prevResult, naiveIsCorrect, tempResults); PrintIfCorrect(Multinomial.Binom, prevPermut, prevPermutNumber, prevResult, binomIsCorrect, tempResults); PrintIfCorrect(Multinomial.Log, prevPermut, prevPermutNumber, prevResult, logIsCorrect, tempResults); PrintIfCorrect(Multinomial.LogGamma, prevPermut, prevPermutNumber, prevResult, lnGammaIsCorrect, tempResults); PrintIfCorrect(Multinomial.My, prevPermut, prevPermutNumber, prevResult, optIsCorrect, tempResults); PrintIfCorrect(Multinomial.PrimeNumbers, prevPermut, prevPermutNumber, prevResult, primeNumbersIsCorrect, tempResults); PrintIfCorrect(Multinomial.Big, prevPermut, prevPermutNumber, prevResult, true, tempResults); PrintTempResult("Naive", tempResults); PrintTempResult("Binom", tempResults); PrintTempResult("Log", tempResults); PrintTempResult("LogGamma", tempResults); PrintTempResult("My", tempResults); PrintTempResult("PrimeNumbers", tempResults); PrintTempResult("Big", tempResults); Results.Remove(Results.Length - 1, 1); } Console.WriteLine(); break; } } iteration++; Results.AppendLine(); }while (prevPermut != null); Console.WriteLine("Count: {0}", count); }