public static RationalNumber operator *(RationalNumber a, RationalNumber b) { RationalNumber result = new RationalNumber(); result.M = a.M * b.M; result.N = a.N * b.N; return reduction(result); }
public static RationalNumber operator /(RationalNumber a, RationalNumber b) { RationalNumber result = new RationalNumber(); result.M = a.M * Convert.ToUInt32(b.N); result.N = a.N * Convert.ToInt32(b.M); return reduction(result); }
public static RationalNumber createFromString(string initialString) { Regex slash = new Regex("/"); string[] two_numbers = slash.Split(initialString); RationalNumber result = new RationalNumber(Convert.ToInt32(two_numbers[0]), Convert.ToUInt32(two_numbers[1])); return result; }
public static RationalNumber reduction(RationalNumber initial) { RationalNumber result = new RationalNumber(initial.N, initial.M); for (int divider = 2; divider <= result.M; divider++) { if (result.N % divider == 0 && result.M % divider == 0) { result.N /= divider; result.M /= Convert.ToUInt32(divider); return reduction(result); break; } } return result; }
public void Test(string text, int num, int denom, int lp, int p, bool detectEqual) { var e = new RationalNumber(num, denom); var sb = new StringBuilder(); var detector = new LargeRepetitionDetector(sb, e, detectEqual); var repetition = new Repetition(0, 0); foreach (var c in text) { sb.Append(c); if (detector.TryDetect(out repetition)) { break; } } Assert.That(repetition, Is.EqualTo(new Repetition(lp, p))); }
public static void Main(string[] args) { List<RationalNumber> curious = new List<RationalNumber>(); for (uint numerator = 10; numerator < 98; numerator++) { for (uint denominator = numerator + 1; denominator < 100; denominator++) { RationalNumber rn = new RationalNumber(numerator, denominator); if (rn.IsCurious()) { Console.WriteLine("Curious: " + rn); curious.Add(rn); } } } Console.WriteLine("Result: {0}", (curious[0] * curious[1] * curious[2] * curious[3]).Reduce().Denominator); }
public static RationalNumber Sqrt(this RationalNumber x, RationalNumber epsilon) { if (x < 0) { throw new OverflowException("Cannot calculate square root from a negative number"); } RationalNumber current = (decimal)Math.Sqrt((double)x.ToDecimal()), previous; do { previous = current; if (previous == 0) { return(0); } current = (previous + (x / previous)) / 2; }while ((previous - current).Abs() > epsilon); return(current); }
public RationalNumber Exprational(int power) { if (power > 0) { this.Numerator = (int)Math.Pow(this.Numerator, power); this.Denominator = (int)Math.Pow(this.Denominator, power); } else if (power < 0) { RationalNumber nab = Abs(); this.Numerator = (int)Math.Pow(nab.Denominator, power); this.Denominator = (int)Math.Pow(nab.Numerator, power); } else //power = 0 { this.Numerator = 1; this.Denominator = 1; } return(this.Reduce()); }
public void Subtr(RationalNumber r) { if (r.p == 0) { return; } if (p == 0) { p = -r.p; q = r.q; return; } p = (p * r.q) - (q * r.p); q *= r.q; Normalize(); }
public void Add(RationalNumber r) { if (r.p == 0) { return; } if (p == 0) { p = r.p; q = r.q; return; } p = (p * r.q) + (q * r.p); q *= r.q; Normalize(); }
public void Mult(RationalNumber r) { if (r.p == 0) { p = 0; q = 1; return; } if (p == 0) { return; } p *= r.p; q *= r.q; Normalize(); }
private static RationalNumber Reduce(RationalNumber n) { int divider = (n.N >= n.D) ? n.N : n.D; while (n.N % divider != 0 || n.D % divider != 0) { divider--; } if (n.N > 0 && n.D < 0) { n.N *= -1; n.D = Math.Abs(n.D); } else if (n.N < 0 && n.D < 0) { n.N = Math.Abs(n.N); n.D = Math.Abs(n.D); } return(new RationalNumber(n.N / divider, n.D / divider)); }
private static int BinarySearch(RationalNumber E, int alphabetSize, bool detectEqual) { int l = 0, r = alphabetSize; if (DetectsRepetition(detectEqual, new RationalNumber(r + 1, r), E)) { throw new InvalidProgramStateException("Inconsistent exponent and alphabet values"); } while (l + 1 < r) { var m = (r + l) / 2; if (DetectsRepetition(detectEqual, new RationalNumber(m + 1, m), E)) { l = m; } else { r = m; } } return(l); }
public bool IfSolutionExists() { RunGaussElimination(); for (long i = m - 1; i >= 0; i--) { RationalNumber lastColumnCoeff = A.Get(i, lastColumnIndex); RationalNumber bVectorElem = A.Get(i, bVectorIndex()); if (!lastColumnCoeff.IsEqualsTo0()) { break; } if (lastColumnCoeff.IsEqualsTo0() && !bVectorElem.IsEqualsTo0()) { return(false); } } return(true); }
private static void GenerateSquare() { var Runs = new[] { 100 }; var lengths = new[] { 100000 }; using (var outputStream = File.Open("D:\\statistics\\square4.txt", FileMode.Create)) using (var output = new StreamWriter(outputStream)) { for (var i = 0; i < Runs.Length; ++i) { var logger = new ConsoleTextLengthLogger(1000); var text = new StringBuilder(); var e = new RationalNumber(2); var generator = new RandomNotLastCharGenerator(text, 4); var detector = new RepetitionDetector(text, e, true); var removeStrategy = new RemoveBorderStrategy(); Calculate(Runs[i], detector, lengths[i], removeStrategy, generator, logger, output); } } }
public static object Divide(object obj1, object obj2) { if (IsFixnum(obj1) && IsFixnum(obj2)) { return(RationalNumber.Create(Convert.ToInt64(obj1), Convert.ToInt64(obj2))); } if (obj1 is RationalNumber) { RationalNumber number1 = (RationalNumber)obj1; if (IsFixnum(obj2)) { return(number1.DivideBy(Convert.ToInt64(obj2))); } if (obj2 is RationalNumber) { return(number1.DivideBy((RationalNumber)obj2)); } obj1 = number1.Value; } if (obj2 is RationalNumber) { RationalNumber number2 = (RationalNumber)obj2; if (IsFixnum(obj1)) { return(number2.DivideTo(Convert.ToInt64(obj1))); } obj2 = number2.Value; } return(Operators.DivideObject(obj1, obj2)); }
public void Test(int num, int denom, string text, int expectedLeftPosition, int expectedPeriod, bool detectEqual, bool result) { var e = new RationalNumber(num, denom); var sb = new StringBuilder(); var detector = new SmallRepetitionDetector(sb, e, detectEqual); Repetition repetition = new Repetition(0, 0); var detected = false; for (var i = 0; i < text.Length; ++i) { sb.Append(text[i]); if (detector.TryDetect(out repetition)) { detected = true; break; } } Assert.That(detected, Is.EqualTo(result)); Assert.That(repetition, Is.EqualTo(new Repetition(expectedLeftPosition, expectedPeriod))); }
public static RationalNumber operator *(RationalNumber r1, RationalNumber r2) { var result = new RationalNumber((r1.num * r2.num), (r1.den * r2.den)); if (result.num == 0) { result = new RationalNumber(result.num, (result.den / result.den)); } else if (result.num == result.den) { result = new RationalNumber((result.num / result.num), (result.den / result.den)); } else if (result.num % (GCD(r1, r2)) == 0) { result = new RationalNumber((result.num / (GCD(r1, r2))), (result.den / (GCD(r1, r2)))); } Console.WriteLine("result is equal to: {0}", result.num); return(result); }
private ICharGenerator GetCharGenerator(StringBuilder text, RationalNumber E, bool detectEqual) { int alphabetSize; if (!int.TryParse(TextBoxAlphabet.Text, out alphabetSize)) { Raise("Alphabet size must be integer"); } var index = ComboBoxCharGenerator.SelectedIndex; if (index < 0 || index > 1) { Raise("Select char generator"); } switch (index) { case 0: return(new RandomCharGenerator(alphabetSize)); default: return(new CleverCharGenerator(text, alphabetSize, E, detectEqual)); } }
/// <summary> /// 将字符串输入转化为矩阵 /// </summary> /// <param name="data">一个以空格分割列元素,换行符分割行元素的字符串</param> /// <returns></returns> public static Mathematics.Matrix StringToMatrix(string data) { data = Regex.Replace(data, @"[ ]+", " "); string[] rowsData = data.Split('\n'); List <string> rows = new List <string>(); foreach (string row in rowsData) { if (string.IsNullOrEmpty(row)) { continue; } rows.Add(row.Trim()); } int rowSize = rows.Count; int columnSize = rows[0].Split(' ').Length; Mathematics.Matrix matrix = new Matrix(rowSize, columnSize); for (int row = 0; row < rowSize; row++) { List <string> elements = new List <string>(); elements.AddRange(rows[row].Split(' ')); while (elements.Count < columnSize) { elements.Add("0/1"); } for (int col = 0; col < columnSize; col++) { matrix[row, col] = new RationalNumber(elements[col]); } } return(matrix); }
private static void Generate3_7d4_plus() { using (var outputStream = File.Open("D:\\statistics\\binary_3_7d4+.txt", FileMode.Create)) using (var output = new StreamWriter(outputStream)) { var Runs = new[] { 100, 100, 100, 100, 100 }; var lengths = new[] { 100, 200, 300, 400, 500 }; var e = new RationalNumber(7, 4); var detectEqual = false; for (var i = 0; i < Runs.Length; ++i) { var length = lengths[i]; Console.WriteLine("Calculating conversion for length = {0}", length); var text = new StringBuilder(); var generator = new CleverCharGenerator(text, 3, e, detectEqual); var detector = new RepetitionDetector(text, e, detectEqual); var removeStrategy = new RemoveBorderStrategy(); Calculate(Runs[i], detector, lengths[i], removeStrategy, generator, null, output); } } }
private RationalNumber GetExponent() { int numerator, denominator; if (!int.TryParse(TextBoxNumerator.Text, out numerator)) { Raise("Numerator must be integer"); } if (!int.TryParse(TextBoxDenominator.Text, out denominator)) { Raise("Denominator must be integer"); } if (denominator == 0) { Raise("Denominator can't be equal to 0"); } var result = new RationalNumber(numerator, denominator); if (result <= new RationalNumber(1)) { Raise("Exponent must be greater than 1"); } return(result); }
public RationalNumber Reduce() { bool isNegative = false; if (denominator < 0) { isNegative = true; } var i = Math.Abs(denominator); while (true) { if (numerator % i == 0 && denominator % i == 0) { break; } i--; } var newNum = (isNegative ? -numerator : numerator) / i; var newDen = (isNegative ? Math.Abs(denominator) : denominator) / i; var result = new RationalNumber(newNum, newDen); return(result); }
public static VideoFormatDescription Match(Size imageSize, RationalNumber frameRate, RationalNumber sar, bool interlaced) { var result = Descriptions.Values.FirstOrDefault((v) => v.ImageSize.Equals(imageSize) && (v.FrameRate.Equals(frameRate) || frameRate.Equals(RationalNumber.Zero)) && (v.SAR.Equals(sar) || sar.Equals(RationalNumber.Zero)) && v.Interlaced == interlaced); return result != null ? result : new VideoFormatDescription(imageSize, frameRate, sar, interlaced); }
private void RunGaussElimination() { ITPLOptions tplOptions = configuration.Get <ITPLOptions>(); uint gaussElimRunnersCount = tplOptions.GaussElimRunnersCount; long s = 0; long[] rowsToSubtract = new long[gaussElimRunnersCount]; for (long k = 0; k < m; k++) { long i_max = -1; while (true) { if (k + s == n) { return; } for (long i = k; i < m; i++) { if (!(A.Get(i, k + s).IsEqualsTo0())) { i_max = i; } } if (i_max == -1) { s++; } else { break; } } A.SwapRows(k, i_max); long p = k + s; SortedDictionary <long, RationalNumber> Mk = A.GetRow(k); RationalNumber Mkp = SparseMatrix.Get(Mk, p); long rowsToProcessCount = m - (k + 1); long[] rowsToProcess = new long[m]; for (long w = 0; w < rowsToProcessCount; w++) { long d = w + (k + 1); rowsToProcess[d] = d; } long from = k + 1; while (true) { SelectRows( rowsToProcess, from, gaussElimRunnersCount, rowsToSubtract, out long rowsToSubtractCount); if (rowsToSubtractCount == 0) { break; } Task[] tasks = new Task[rowsToSubtractCount]; List <RowSubtractorSparceMThreads> rowSubtractors = new(); for (int i = 0; i < rowsToSubtractCount; i++) { long row = rowsToSubtract[i]; RowSubtractorSparceMThreads rowSubtractor = new(); rowSubtractor.A = A; rowSubtractor.rowIndex = row; rowSubtractor.m = m; rowSubtractor.n = n; rowSubtractor.p = p; rowSubtractor.Mk = Mk; rowSubtractor.Mkp = Mkp; rowSubtractors.Add(rowSubtractor); } TPLCollectionRunner <RowSubtractorSparceMThreads> rowSubtractorsRunner = new ( rowSubtractors, gaussElimRunnersCount, WaitMethod.WaitAll, _ => default !
public void Divide() { Assert.AreEqual(2, Numbers.Divide(4, 2)); Assert.AreEqual(4 / 3.0, Numbers.Divide(4, 3.0)); Assert.AreEqual(RationalNumber.Create(3, 2), Numbers.Divide(3, 2)); Assert.AreEqual(RationalNumber.Create(3, 4), Numbers.Divide(RationalNumber.Create(3, 2), 2)); Assert.AreEqual(RationalNumber.Create(4, 3), Numbers.Divide(2, RationalNumber.Create(3, 2))); Assert.AreEqual(2.0 / (3.0 / 2), Numbers.Divide(2.0, RationalNumber.Create(3, 2))); Assert.AreEqual((3.0 / 2) / 2.0, Numbers.Divide(RationalNumber.Create(3, 2), 2.0)); Assert.AreEqual(RationalNumber.Create(21, 10), Numbers.Divide(RationalNumber.Create(3, 2), RationalNumber.Create(5, 7))); }
private bool FoundRepetition(Repetition repetition) { var exponent = new RationalNumber(text.Length - (repetition.LeftPosition + 1), repetition.Period); return(detectEqual ? exponent >= e : exponent > e); }
static int RationalNumberComparer(RationalNumber rn1, RationalNumber rn2) { return (Convert.ToInt32(rn1.Numerator) / Convert.ToInt32(rn1.Denominator)) - (Convert.ToInt32(rn1.Numerator) / Convert.ToInt32(rn1.Denominator)); }
public void Multiply() { Assert.AreEqual(2, Numbers.Multiply(1, 2)); Assert.AreEqual(2.2, Numbers.Multiply(1.1, 2)); Assert.AreEqual(3, Numbers.Multiply(RationalNumber.Create(3, 2), 2)); Assert.AreEqual(3, Numbers.Multiply(2, RationalNumber.Create(3, 2))); Assert.AreEqual(3.0, Numbers.Multiply(RationalNumber.Create(3, 2), 2.0)); Assert.AreEqual(3.0, Numbers.Multiply(2.0, RationalNumber.Create(3, 2))); Assert.AreEqual(RationalNumber.Create(15, 14), Numbers.Multiply(RationalNumber.Create(3, 2), RationalNumber.Create(5, 7))); }
public static double Expreal(this int realNumber, RationalNumber r) { return(Math.Exp(Math.Log(realNumber) * r.Numerator / r.Denominator)); }
public static double Expreal(this int realNumber, RationalNumber r) { throw new NotImplementedException("You need to implement this extension method."); }
public static double Expreal(this int realNumber, RationalNumber r) => r.Expreal(realNumber);
public static double Expreal(this int realNumber, RationalNumber r) { return(Math.Pow((double)realNumber, (double)(r.n) / (r.d))); }
private VideoFormatDescription(Size imageSize, RationalNumber frameRate, RationalNumber sar, bool interlaced) { Format = TVideoFormat.Other; Interlaced = interlaced; ImageSize = imageSize; FrameRate = frameRate; SAR = sar; }
static void Main(string[] args) { Console.Write("Input first number: "); RationalNumber first = RationalNumber.createFromString(Console.ReadLine()); RationalNumber second = new RationalNumber(20, 10); Console.WriteLine("First number: " + first.ToString()); Console.WriteLine("Second number: " + second.ToString()); Console.WriteLine(first.ToString()+ " + " + second.ToString()+ " = " + (first + second).ToString()); Console.WriteLine(first.ToString() + " - " + second.ToString() + " = " + (first - second).ToString()); Console.WriteLine(first.ToString() + " * " + second.ToString() + " = " + (first * second).ToString()); Console.WriteLine(first.ToString() + " / " + second.ToString() + " = " + (first / second).ToString()); Console.Write("Press any key to exit..."); Console.ReadKey(); }
static void Main(string[] args) { del firstDel = new del(RationalNumber.noException); del secondDel = delegate(uint a) { return a; }; Func<uint, uint> anonM = RationalNumber.noException; RationalNumber first = RationalNumber.createFromString(Console.ReadLine()); RationalNumber second = new RationalNumber(20, 0); Console.Write("Input first number: "); try { int i = first.N / Convert.ToInt32(first.M); } catch (DivideByZeroException) { first.M = firstDel(1); //first.M = anonM(1); } try { int i = second.N / Convert.ToInt32(second.M); } catch (DivideByZeroException) { second.M = secondDel(1); } Console.WriteLine("\nFirst number: " + first.ToString()); Console.WriteLine("Second number: " + second.ToString()); Console.WriteLine(first.ToString()+ " + " + second.ToString()+ " = " + (first + second).ToString()); Console.WriteLine(first.ToString() + " - " + second.ToString() + " = " + (first - second).ToString()); Console.WriteLine(first.ToString() + " * " + second.ToString() + " = " + (first * second).ToString()); Console.WriteLine(first.ToString() + " / " + second.ToString() + " = " + (first / second).ToString()); Console.Write("Press any key to exit..."); Console.ReadKey(); }
public RationalNumber Sub(RationalNumber r) => new RationalNumber(numerator * r.denominator - denominator * r.numerator, denominator * r.denominator).Reduce();
private Expr _Canonicalize(RationalNumber n) { return n; }
public RationalNumber Div(RationalNumber r) => new RationalNumber(numerator * r.denominator, r.numerator * denominator).Reduce();
private Expr _Numericize(RationalNumber n) { return new DoubleNumber(n.Num.AsDouble()); }
public RationalNumber Div(RationalNumber r) { throw new NotImplementedException("You need to implement this function."); }
private VideoFormatDescription(TVideoFormat format) { this.Format = format; switch (format) { case TVideoFormat.PAL_FHA: Interlaced = true; ImageSize = new Size(720, 576); FrameRate = new RationalNumber(25, 1); SAR = new RationalNumber(64, 45); break; case TVideoFormat.PAL: Interlaced = true; ImageSize = new Size(720, 576); FrameRate = new RationalNumber(25, 1); SAR = new RationalNumber(16, 15); break; case TVideoFormat.PAL_FHA_P: Interlaced = false; ImageSize = new Size(720, 576); FrameRate = new RationalNumber(25, 1); SAR = new RationalNumber(64, 45); break; case TVideoFormat.PAL_P: Interlaced = false; ImageSize = new Size(720, 576); FrameRate = new RationalNumber(25, 1); SAR = new RationalNumber(16, 15); break; case TVideoFormat.NTSC_FHA: Interlaced = true; ImageSize = new Size(640, 486); FrameRate = new RationalNumber(30, 1); SAR = new RationalNumber(40, 33); break; case TVideoFormat.NTSC: Interlaced = true; ImageSize = new Size(640, 486); FrameRate = new RationalNumber(30, 1); SAR = new RationalNumber(10, 11); break; case TVideoFormat.HD1080i5000: Interlaced = true; ImageSize = new Size(1920, 1080); FrameRate = new RationalNumber(25, 1); SAR = new RationalNumber(1, 1); break; case TVideoFormat.HD1080i5994: Interlaced = true; ImageSize = new Size(1920, 1080); FrameRate = new RationalNumber(2997, 100); SAR = new RationalNumber(1, 1); break; case TVideoFormat.HD1080i6000: Interlaced = true; ImageSize = new Size(1920, 1080); FrameRate = new RationalNumber(30, 1); SAR = new RationalNumber(1, 1); break; case TVideoFormat.HD1080p2398: Interlaced = false; ImageSize = new Size(1920, 1080); FrameRate = new RationalNumber(2398, 100); SAR = new RationalNumber(1, 1); break; case TVideoFormat.HD1080p2400: Interlaced = false; ImageSize = new Size(1920, 1080); FrameRate = new RationalNumber(24, 1); SAR = new RationalNumber(1, 1); break; case TVideoFormat.HD1080p2500: Interlaced = false; ImageSize = new Size(1920, 1080); FrameRate = new RationalNumber(25, 1); SAR = new RationalNumber(1, 1); break; case TVideoFormat.HD1080p2997: Interlaced = false; ImageSize = new Size(1920, 1080); FrameRate = new RationalNumber(2997, 100); SAR = new RationalNumber(1, 1); break; case TVideoFormat.HD1080p3000: Interlaced = false; ImageSize = new Size(1920, 1080); FrameRate = new RationalNumber(30, 1); SAR = new RationalNumber(1, 1); break; case TVideoFormat.HD1080p5000: Interlaced = false; ImageSize = new Size(1920, 1080); FrameRate = new RationalNumber(50, 1); SAR = new RationalNumber(1, 1); break; case TVideoFormat.HD1080p5994: Interlaced = false; ImageSize = new Size(1920, 1080); FrameRate = new RationalNumber(5994, 100); SAR = new RationalNumber(1, 1); break; case TVideoFormat.HD1080p6000: Interlaced = false; ImageSize = new Size(1920, 1080); FrameRate = new RationalNumber(60, 1); SAR = new RationalNumber(1, 1); break; case TVideoFormat.HD2160p2398: Interlaced = false; ImageSize = new Size(3840, 2160); FrameRate = new RationalNumber(2398, 100); SAR = new RationalNumber(1, 1); break; case TVideoFormat.HD2160p2400: Interlaced = false; ImageSize = new Size(3840, 2160); FrameRate = new RationalNumber(24, 1); SAR = new RationalNumber(1, 1); break; case TVideoFormat.HD2160p2500: Interlaced = false; ImageSize = new Size(3840, 2160); FrameRate = new RationalNumber(25, 1); SAR = new RationalNumber(1, 1); break; case TVideoFormat.HD2160p2997: Interlaced = false; ImageSize = new Size(3840, 2160); FrameRate = new RationalNumber(2997, 100); SAR = new RationalNumber(1, 1); break; case TVideoFormat.HD2160p3000: Interlaced = false; ImageSize = new Size(3840, 2160); FrameRate = new RationalNumber(30, 1); SAR = new RationalNumber(1, 1); break; case TVideoFormat.HD720p2500: Interlaced = false; ImageSize = new Size(1440, 720); FrameRate = new RationalNumber(25, 1); SAR = new RationalNumber(1, 1); break; case TVideoFormat.HD720p5000: Interlaced = false; ImageSize = new Size(1440, 720); FrameRate = new RationalNumber(50, 1); SAR = new RationalNumber(1, 1); break; case TVideoFormat.HD720p5994: Interlaced = false; ImageSize = new Size(1440, 720); FrameRate = new RationalNumber(5994, 100); SAR = new RationalNumber(1, 1); break; case TVideoFormat.HD720p6000: Interlaced = false; ImageSize = new Size(1440, 720); FrameRate = new RationalNumber(60, 1); SAR = new RationalNumber(1, 1); break; } }
public static double Expreal(this int realNumber, RationalNumber r) { return(r.Expreal(realNumber)); }
public RationalNumber Reduce() { RationalNumber result; UInt32 gcd = GCD(numerator, denominator); result = new RationalNumber(numerator/gcd, denominator/gcd); return result; }