101 references to BigIntegerCalculator
System.Runtime.Numerics (101)
System\Number.BigInteger.cs (20)
398double digitRatio = 0.10381025297 * 32.0 / BigIntegerCalculator.BitsPerLimb; // log_{2^BitsPerLimb}(10) 430double digitRatio = 0.10381025297 * 32.0 / BigIntegerCalculator.BitsPerLimb; 435leading = leading.Slice(0, BigIntegerCalculator.ActualLength(leading)); 452base1E9 = base1E9.Slice(0, BigIntegerCalculator.ActualLength(base1E9)); 470double digitRatio = 0.10381025297 * 32.0 / BigIntegerCalculator.BitsPerLimb; 476ReadOnlySpan<nuint> buffer2 = buffer.Slice(0, BigIntegerCalculator.ActualLength(buffer)); 478BigIntegerCalculator.Multiply(buffer2, multiplier, bitsUpper); 484BigIntegerCalculator.AddSelf(bits, buffer.Slice(0, BigIntegerCalculator.ActualLength(buffer))); 832double digitRatio = 1.070328873472 * BigIntegerCalculator.BitsPerLimb / 32.0; 988int ToStringNaiveThreshold = BigIntegerCalculator.DivideBurnikelZieglerThreshold; 1018while (bits.Length < powOfTen.Length + omittedLength || BigIntegerCalculator.Compare(bits.Slice(omittedLength), powOfTen) < 0) 1032BigIntegerCalculator.Divide(bits.Slice(omittedLength), powOfTen, upper, lower.Slice(omittedLength)); 1041lower.Slice(0, BigIntegerCalculator.ActualLength(lower)), 1052upper.Slice(0, BigIntegerCalculator.ActualLength(upper)), 1346BigIntegerCalculator.Square(src, dst); 1396return (MaxPartialDigits * (1 << index)) / BigIntegerCalculator.BitsPerLimb; 1429BigIntegerCalculator.Multiply(left, UInt32PowersOfTen[trailingZeroCount], bits.Slice(0, left.Length + 1)); 1467BigIntegerCalculator.Multiply(src, power, dst); 1485BigIntegerCalculator.Multiply(left, powersOfTen, bits2);
System\Numerics\BigInteger.cs (76)
38internal static int MaxLength => Array.MaxLength / BigIntegerCalculator.BitsPerLimb; 215int bitsPerLimb = BigIntegerCalculator.BitsPerLimb; 923BigIntegerCalculator.Divide(dividend._bits, NumericsHelpers.Abs(divisor._sign), quotient, out nuint rest); 946BigIntegerCalculator.Divide(dividend._bits, divisor._bits, quotient, rest); 1037return BigIntegerCalculator.Gcd(NumericsHelpers.Abs(left._sign), NumericsHelpers.Abs(right._sign)); 1044? BigIntegerCalculator.Gcd(right._bits, NumericsHelpers.Abs(left._sign)) 1052? BigIntegerCalculator.Gcd(left._bits, NumericsHelpers.Abs(right._sign)) 1058return BigIntegerCalculator.Compare(left._bits, right._bits) < 0 1065Debug.Assert(BigIntegerCalculator.Compare(leftBits, rightBits) >= 0); 1072nuint temp = BigIntegerCalculator.Remainder(leftBits, rightBits[0]); 1073result = BigIntegerCalculator.Gcd(rightBits[0], temp); 1079BigIntegerCalculator.Remainder(leftBits, rightBits, bits); 1084result = BigIntegerCalculator.Gcd(left, right); 1091BigIntegerCalculator.Gcd(leftBits, rightBits, bits); 1121nuint bitsResult = trivialValue && trivialExponent ? BigIntegerCalculator.Pow(NumericsHelpers.Abs(value._sign), NumericsHelpers.Abs(exponent._sign), NumericsHelpers.Abs(modulus._sign)) : 1122trivialValue ? BigIntegerCalculator.Pow(NumericsHelpers.Abs(value._sign), exponent._bits!, NumericsHelpers.Abs(modulus._sign)) : 1123trivialExponent ? BigIntegerCalculator.Pow(value._bits!, NumericsHelpers.Abs(exponent._sign), NumericsHelpers.Abs(modulus._sign)) : 1124BigIntegerCalculator.Pow(value._bits!, exponent._bits!, NumericsHelpers.Abs(modulus._sign)); 1136BigIntegerCalculator.Pow(NumericsHelpers.Abs(value._sign), NumericsHelpers.Abs(exponent._sign), modulus._bits!, bits); 1140BigIntegerCalculator.Pow(NumericsHelpers.Abs(value._sign), exponent._bits!, modulus._bits!, bits); 1145BigIntegerCalculator.Pow(value._bits!, NumericsHelpers.Abs(exponent._sign), modulus._bits!, bits); 1149BigIntegerCalculator.Pow(value._bits!, exponent._bits!, modulus._bits!, bits); 1196int size = BigIntegerCalculator.PowBound(power, 1); 1199BigIntegerCalculator.Pow(NumericsHelpers.Abs(value._sign), power, bits); 1205int size = BigIntegerCalculator.PowBound(power, value._bits!.Length); 1208BigIntegerCalculator.Pow(value._bits, power, bits); 1389int bitsResult = BigIntegerCalculator.Compare(_bits, other._bits); 1757nuint highBitMask = (nuint)1 << (BigIntegerCalculator.BitsPerLimb - 1); 1814int bitsPerLimb = BigIntegerCalculator.BitsPerLimb; 1888BigIntegerCalculator.Add(rightBits, NumericsHelpers.Abs(leftSign), bits); 1899BigIntegerCalculator.Add(leftBits, NumericsHelpers.Abs(rightSign), bits); 1910BigIntegerCalculator.Add(rightBits, leftBits, bits); 1921BigIntegerCalculator.Add(leftBits, rightBits, bits); 1957BigIntegerCalculator.Subtract(rightBits, NumericsHelpers.Abs(leftSign), bits); 1968BigIntegerCalculator.Subtract(leftBits, NumericsHelpers.Abs(rightSign), bits); 1972else if (BigIntegerCalculator.Compare(leftBits, rightBits) < 0) 1977BigIntegerCalculator.Subtract(rightBits, leftBits, bits); 1988BigIntegerCalculator.Subtract(leftBits, rightBits, bits); 2028int bitsPerLimb = BigIntegerCalculator.BitsPerLimb; 2527return BitwiseOp<BigIntegerCalculator.BitwiseAndOp>(in left, in right, zLen); 2537return BitwiseOp<BigIntegerCalculator.BitwiseOrOp>(in left, in right, Math.Max(xLen, yLen) + 1); 2547return BitwiseOp<BigIntegerCalculator.BitwiseXorOp>(in left, in right, Math.Max(xLen, yLen) + 1); 2551where TOp : struct, BigIntegerCalculator.IBitwiseOp 2555BigIntegerCalculator.BitwiseOp<TOp>( 2584(int digitShift, int smallShift) = Math.DivRem(shift, BigIntegerCalculator.BitsPerLimb); 2599: bits[^1] >> (BigIntegerCalculator.BitsPerLimb - smallShift); 2617BigIntegerCalculator.LeftShiftSelf(zd, smallShift, out nuint carry); 2637: m >> (BigIntegerCalculator.BitsPerLimb - smallShift); 2678(int digitShift, int smallShift) = Math.DivRem(shift, BigIntegerCalculator.BitsPerLimb); 2709BigIntegerCalculator.RightShiftSelf(zd, smallShift, out nuint carry); 2746BigIntegerCalculator.Add(value._bits, 1, bits); 2755BigIntegerCalculator.Subtract(value._bits, 1, bits); 2781BigIntegerCalculator.Add(value._bits, 1, bits); 2789BigIntegerCalculator.Subtract(value._bits, 1, bits); 2810BigIntegerCalculator.Subtract(value._bits, 1, bits); 2819BigIntegerCalculator.Add(value._bits, 1, bits); 2860BigIntegerCalculator.Multiply(right, NumericsHelpers.Abs(leftSign), bits); 2871BigIntegerCalculator.Multiply(left, NumericsHelpers.Abs(rightSign), bits); 2880BigIntegerCalculator.Square(left, bits); 2891BigIntegerCalculator.Multiply(left, right, bits); 2924BigIntegerCalculator.Divide(dividend._bits, NumericsHelpers.Abs(divisor._sign), quotient); 2944BigIntegerCalculator.Divide(dividend._bits, divisor._bits, quotient); 2973nuint remainder = BigIntegerCalculator.Remainder(dividend._bits, NumericsHelpers.Abs(divisor._sign)); 2987BigIntegerCalculator.Remainder(dividend._bits, divisor._bits, bits); 3090long bitLength = (long)bitsArrayLength * BigIntegerCalculator.BitsPerLimb - 3270&& (leadingZeroCount != bits.Length - 1 || bits[^1] != ((nuint)1 << (BigIntegerCalculator.BitsPerLimb - 1)))) 3296BigIntegerCalculator.RotateLeft(zd, rotateLeftAmount); 3332result += (uint)BigIntegerCalculator.BitsPerLimb; 3366int result = (bits.Length - 1) * BigIntegerCalculator.BitsPerLimb; 3370result += BigIntegerCalculator.BitsPerLimb - BitOperations.LeadingZeroCount(bits[^1]); 3385result += BigIntegerCalculator.BitsPerLimb + 1 - BitOperations.LeadingZeroCount(~part); 3602? (BigInteger)((BigIntegerCalculator.BitsPerLimb - 1) ^ BitOperations.LeadingZeroCount((nuint)value._sign | 1)) 3603: (BigInteger)(((long)value._bits.Length * BigIntegerCalculator.BitsPerLimb - 1) ^ BitOperations.LeadingZeroCount(value._bits[^1])); 4984(int digitShift, int smallShift) = Math.DivRem(shiftAmount, BigIntegerCalculator.BitsPerLimb); 5023nuint signBit = (nuint)1 << (BigIntegerCalculator.BitsPerLimb - 1); 5073BigIntegerCalculator.RightShiftSelf(zd, smallShift, out _);
System\Numerics\BigIntegerCalculator.SquMul.cs (5)
708BigIntegerCalculator.Square(p0, r0); 709BigIntegerCalculator.Square(p1, r1); 710BigIntegerCalculator.Square(pm1, rm1); 711BigIntegerCalculator.Square(pm2, rm2); 712BigIntegerCalculator.Square(pInf, rInf);