public static MBgNmbr Sum2MBgNmbrs(MBgNmbr myNmbr1, MBgNmbr myNmbr2) { int smallerByAbs = MBgNmbr.SmallByAbsIsFrstOrScnd(myNmbr1, myNmbr2); MBgNmbr bgrByAbs, smlrByAbs; int signOfBigger = 0; if (smallerByAbs == 1) { smlrByAbs = myNmbr1; bgrByAbs = myNmbr2; signOfBigger = myNmbr2.SignNmbr; } else { smlrByAbs = myNmbr2; bgrByAbs = myNmbr1; signOfBigger = myNmbr1.SignNmbr; } string bgrAbNmbs = bgrByAbs.BNDgt; string smlAbsNmbrs = smlrByAbs.BNDgt; int bigAbsFlPs = bgrByAbs.FltPntPsitin; int smallerAbsFlPos = smlrByAbs.FltPntPsitin; int biggerFlPPos = 0; if (bigAbsFlPs > smallerAbsFlPos) { biggerFlPPos = bigAbsFlPs; smlAbsNmbrs = MBgNmbr.AdNmbrZr(smlAbsNmbrs, -1 * (bigAbsFlPs - smallerAbsFlPos)); } else { biggerFlPPos = smallerAbsFlPos; bgrAbNmbs = MBgNmbr.AdNmbrZr(bgrAbNmbs, -1 * (smallerAbsFlPos - bigAbsFlPs)); } if (smlAbsNmbrs.Length < bgrAbNmbs.Length) { smlAbsNmbrs = MBgNmbr.AdNmbrZr(smlAbsNmbrs, bgrAbNmbs.Length - smlAbsNmbrs.Length); } string newStrBNDgt; if ((myNmbr1.SignNmbr * myNmbr2.SignNmbr) >= 0) { newStrBNDgt = MBgNmbr.AddTwoLines(bgrAbNmbs, smlAbsNmbrs); } else { newStrBNDgt = MBgNmbr.BiggerMinusSmaller(bgrAbNmbs, smlAbsNmbrs); } var myNmbr3 = new MBgNmbr() { BNDgt = newStrBNDgt, SignNmbr = signOfBigger, FltPntPsitin = biggerFlPPos }; string newStringVal = myNmbr3.Value(); return(MBgNmbr.CrMBigNmb(newStringVal)); }
public static MBgNmbr MultiplyBy(MBgNmbr MBgNmbr, MBgNmbr myBigMultiplier) { string tmpNmbrString = MBgNmbr.BNDgt; string tmpMltplrString = myBigMultiplier.BNDgt; var lstMtpldLines = new List <string>(tmpMltplrString.Length); for (int i = tmpMltplrString.Length - 1; i >= 0; i--) { string line = MBgNmbr.MltiplLnByChr(tmpNmbrString, tmpMltplrString[i]); line = MBgNmbr.AdNmbrZr(line, (-1 * (tmpMltplrString.Length - 1 - i))); lstMtpldLines.Add(line); } MBgNmbr.IndntLngthWZrs(lstMtpldLines); string lineSum = lstMtpldLines[0]; for (int i = 1; i < lstMtpldLines.Count; i++) { string tmpLine = lstMtpldLines[i]; var lsAppend = new List <string>(2); lsAppend.Add(lineSum); lsAppend.Add(tmpLine); MBgNmbr.IndntLngthWZrs(lsAppend); lineSum = MBgNmbr.AddTwoLines(lsAppend[0], lsAppend[1]); } int pstnFloatPoint = MBgNmbr.FltPntPsitin + myBigMultiplier.FltPntPsitin; int nmbrLeadZeroes = pstnFloatPoint - lineSum.Length + 1; if (nmbrLeadZeroes > 0) { lineSum = MBgNmbr.AdNmbrZr(lineSum, nmbrLeadZeroes); } int newSign = myBigMultiplier.SignNmbr * MBgNmbr.SignNmbr; var newMyNumber = new MBgNmbr() { BNDgt = lineSum, FltPntPsitin = pstnFloatPoint, SignNmbr = newSign }; string resultValue = newMyNumber.Value(); var resMyNumber = MBgNmbr.CrMBigNmb(resultValue); return(resMyNumber); }