private double GetGcd(InternalEvaluatorValue a, InternalEvaluatorValue b) { while (Abs(b) > NoStringEvaluatorConstants.FloatingTolerance) { var tmp = b; b = a % b; a = tmp; } return(a); }
private string CropWordWord(string word, InternalEvaluatorValue argStart, InternalEvaluatorValue argEnd) { var wordStart = argStart.GetWord(); var wordEnd = argEnd.GetWord(); var wordStartIndex = word.IndexOf(wordStart, StringComparison.Ordinal); if (wordStartIndex == -1) { return(string.Empty); } wordStartIndex += wordStart.Length; var wordEndIndex = word.AsSpan().Slice(wordStartIndex).IndexOf(wordEnd, StringComparison.Ordinal); if (wordEndIndex == -1) { return(string.Empty); } wordEndIndex += wordStartIndex; return(word[wordStartIndex..wordEndIndex]);
private string MiddleWord(InternalEvaluatorValue argStart, InternalEvaluatorValue argEnd, string word) { if (argStart.IsNumber && argEnd.IsNumber) { return(CropNumberNumber(word, argStart, argEnd)); } if (argStart.IsNumber && argEnd.IsWord) { return(CropNumberWord(word, argStart, argEnd)); } if (argStart.IsWord && argEnd.IsNumber) { return(CropWordNumber(word, argStart, argEnd)); } if (argStart.IsWord && argEnd.IsWord) { return(CropWordWord(word, argStart, argEnd)); } return(string.Empty); }
/// <summary> /// Concates two values to word /// </summary> public InternalEvaluatorValue Concat(InternalEvaluatorValue a, InternalEvaluatorValue b) { var word = $"{a}{b}"; return(Create(word)); }
private double GetLcm(InternalEvaluatorValue a, InternalEvaluatorValue b) { return((a * b) / GetGcd(a, b)); }