internal string ToDecimal() { if (IsZero()) { return("0"); } BigInt ten = new BigInt(0xA); BigInt numerator = new BigInt(); BigInt quotient = new BigInt(); BigInt remainder = new BigInt(); numerator.CopyFrom(this); // Each hex digit can account for log(16) = 1.21 decimal digits. Times two hex digits in a byte // and m_size bytes used in this BigInt, yields the maximum number of characters for the decimal // representation of the BigInt. char[] dec = new char[(int)Math.Ceiling(m_size * 2 * 1.21)]; int index = 0; do { Divide(numerator, ten, ref quotient, ref remainder); dec[index++] = decValues[remainder.IsZero() ? 0 : (int)remainder.m_elements[0]]; numerator.CopyFrom(quotient); } while (quotient.IsZero() == false); Array.Reverse(dec, 0, index); return(new String(dec, 0, index)); }
internal string ToDecimal() { if (this.IsZero()) { return("0"); } BigInt denominator = new BigInt(10); BigInt numerator = new BigInt(); BigInt quotient = new BigInt(); BigInt remainder = new BigInt(); numerator.CopyFrom(this); char[] array = new char[(int)Math.Ceiling((double)((this.m_size * 2) * 1.21))]; int length = 0; do { Divide(numerator, denominator, ref quotient, ref remainder); array[length++] = decValues[remainder.IsZero() ? 0 : remainder.m_elements[0]]; numerator.CopyFrom(quotient); }while (!quotient.IsZero()); Array.Reverse(array, 0, length); return(new string(array, 0, length)); }
public Projective EcMult(BigInt d, Projective s) { var size = s.x.Length; if (d.IsZero() || s.z.IsZero()) { return new Projective() { x = new BigInt(1, size), y = new BigInt(1, size), z = new BigInt(0, size) }; } if (d.IsOne()) { return s.Clone(); } if (!s.z.IsOne()) { var affine = EcAffinify(s); s = EcProjectify(affine); affine.Clear(); } else { s = s.Clone(); } var r = s.Clone(); var h = d.Mul3(); for (var i = h.BitCount() - 2; i >= 1; i--) { var rTmp = r; r = EcDouble(r); rTmp.Clear(); if (h.BitAt(i) && !d.BitAt(i)) { var u = EcFullAdd(r, s); r.Clear(); r = u; } else if (!h.BitAt(i) && d.BitAt(i)) { var u = EcFullSub(r, s); r.Clear(); r = u; } } h.Clear(); return r; }
internal string ToDecimal () { if (IsZero()) return "0"; BigInt ten = new BigInt(0xA); BigInt numerator = new BigInt(); BigInt quotient = new BigInt(); BigInt remainder = new BigInt(); numerator.CopyFrom(this); // Each hex digit can account for log(16) = 1.21 decimal digits. Times two hex digits in a byte // and m_size bytes used in this BigInt, yields the maximum number of characters for the decimal // representation of the BigInt. char[] dec = new char[(int)Math.Ceiling(m_size * 2 * 1.21)]; int index = 0; do { Divide(numerator, ten, ref quotient, ref remainder); dec[index++] = decValues[remainder.IsZero() ? 0 : (int)remainder.m_elements[0]]; numerator.CopyFrom(quotient); } while (quotient.IsZero() == false); Array.Reverse(dec, 0, index); return new String(dec, 0, index); }
internal string ToDecimal() { if (this.IsZero()) { return "0"; } BigInt denominator = new BigInt(10); BigInt numerator = new BigInt(); BigInt quotient = new BigInt(); BigInt remainder = new BigInt(); numerator.CopyFrom(this); char[] array = new char[(int) Math.Ceiling((double) ((this.m_size * 2) * 1.21))]; int length = 0; do { Divide(numerator, denominator, ref quotient, ref remainder); array[length++] = decValues[remainder.IsZero() ? 0 : remainder.m_elements[0]]; numerator.CopyFrom(quotient); } while (!quotient.IsZero()); Array.Reverse(array, 0, length); return new string(array, 0, length); }