114 references to BigIntegerCalculator
System.Runtime.Numerics (114)
System\Number.BigInteger.cs (20)
442
double digitRatio = 0.10381025297 * 32.0 /
BigIntegerCalculator
.BitsPerLimb; // log_{2^BitsPerLimb}(10)
474
double digitRatio = 0.10381025297 * 32.0 /
BigIntegerCalculator
.BitsPerLimb;
479
leading = leading.Slice(0,
BigIntegerCalculator
.ActualLength(leading));
496
base1E9 = base1E9.Slice(0,
BigIntegerCalculator
.ActualLength(base1E9));
514
double digitRatio = 0.10381025297 * 32.0 /
BigIntegerCalculator
.BitsPerLimb;
520
ReadOnlySpan<nuint> buffer2 = buffer.Slice(0,
BigIntegerCalculator
.ActualLength(buffer));
522
BigIntegerCalculator
.Multiply(buffer2, multiplier, bitsUpper);
528
BigIntegerCalculator
.AddSelf(bits, buffer.Slice(0,
BigIntegerCalculator
.ActualLength(buffer)));
876
double digitRatio = 1.070328873472 *
BigIntegerCalculator
.BitsPerLimb / 32.0;
1032
int ToStringNaiveThreshold =
BigIntegerCalculator
.DivideBurnikelZieglerThreshold;
1062
while (bits.Length < powOfTen.Length + omittedLength ||
BigIntegerCalculator
.Compare(bits.Slice(omittedLength), powOfTen) < 0)
1076
BigIntegerCalculator
.Divide(bits.Slice(omittedLength), powOfTen, upper, lower.Slice(omittedLength));
1085
lower.Slice(0,
BigIntegerCalculator
.ActualLength(lower)),
1096
upper.Slice(0,
BigIntegerCalculator
.ActualLength(upper)),
1390
BigIntegerCalculator
.Square(src, dst);
1440
return (MaxPartialDigits * (1 << index)) /
BigIntegerCalculator
.BitsPerLimb;
1473
BigIntegerCalculator
.Multiply(left, UInt32PowersOfTen[trailingZeroCount], bits.Slice(0, left.Length + 1));
1511
BigIntegerCalculator
.Multiply(src, power, dst);
1529
BigIntegerCalculator
.Multiply(left, powersOfTen, bits2);
System\Numerics\BigInteger.cs (89)
38
internal static int MaxLength => Array.MaxLength /
BigIntegerCalculator
.BitsPerLimb;
215
int bitsPerLimb =
BigIntegerCalculator
.BitsPerLimb;
942
BigIntegerCalculator
.Divide(dividend._bits, NumericsHelpers.Abs(divisor._sign), quotient, out nuint rest);
963
BigIntegerCalculator
.Divide(dividend._bits, divisor._bits, quotient, rest);
1054
return
BigIntegerCalculator
.Gcd(NumericsHelpers.Abs(left._sign), NumericsHelpers.Abs(right._sign));
1061
?
BigIntegerCalculator
.Gcd(right._bits, NumericsHelpers.Abs(left._sign))
1069
?
BigIntegerCalculator
.Gcd(left._bits, NumericsHelpers.Abs(right._sign))
1075
return
BigIntegerCalculator
.Compare(left._bits, right._bits) < 0
1082
Debug.Assert(
BigIntegerCalculator
.Compare(leftBits, rightBits) >= 0);
1089
nuint temp =
BigIntegerCalculator
.Remainder(leftBits, rightBits[0]);
1090
result =
BigIntegerCalculator
.Gcd(rightBits[0], temp);
1096
BigIntegerCalculator
.Remainder(leftBits, rightBits, bits);
1101
result =
BigIntegerCalculator
.Gcd(left, right);
1108
BigIntegerCalculator
.Gcd(leftBits, rightBits, bits);
1138
nuint bitsResult = trivialValue && trivialExponent ?
BigIntegerCalculator
.Pow(NumericsHelpers.Abs(value._sign), NumericsHelpers.Abs(exponent._sign), NumericsHelpers.Abs(modulus._sign)) :
1139
trivialValue ?
BigIntegerCalculator
.Pow(NumericsHelpers.Abs(value._sign), exponent._bits!, NumericsHelpers.Abs(modulus._sign)) :
1140
trivialExponent ?
BigIntegerCalculator
.Pow(value._bits!, NumericsHelpers.Abs(exponent._sign), NumericsHelpers.Abs(modulus._sign)) :
1141
BigIntegerCalculator
.Pow(value._bits!, exponent._bits!, NumericsHelpers.Abs(modulus._sign));
1153
BigIntegerCalculator
.Pow(NumericsHelpers.Abs(value._sign), NumericsHelpers.Abs(exponent._sign), modulus._bits!, bits);
1157
BigIntegerCalculator
.Pow(NumericsHelpers.Abs(value._sign), exponent._bits!, modulus._bits!, bits);
1162
BigIntegerCalculator
.Pow(value._bits!, NumericsHelpers.Abs(exponent._sign), modulus._bits!, bits);
1166
BigIntegerCalculator
.Pow(value._bits!, exponent._bits!, modulus._bits!, bits);
1213
int size =
BigIntegerCalculator
.PowBound(power, 1);
1216
BigIntegerCalculator
.Pow(NumericsHelpers.Abs(value._sign), power, bits);
1222
int size =
BigIntegerCalculator
.PowBound(power, value._bits!.Length);
1225
BigIntegerCalculator
.Pow(value._bits, power, bits);
1406
int bitsResult =
BigIntegerCalculator
.Compare(_bits, other._bits);
1774
nuint highBitMask = (nuint)1 << (
BigIntegerCalculator
.BitsPerLimb - 1);
1831
int bitsPerLimb =
BigIntegerCalculator
.BitsPerLimb;
1905
BigIntegerCalculator
.Add(rightBits, NumericsHelpers.Abs(leftSign), bits);
1916
BigIntegerCalculator
.Add(leftBits, NumericsHelpers.Abs(rightSign), bits);
1927
BigIntegerCalculator
.Add(rightBits, leftBits, bits);
1938
BigIntegerCalculator
.Add(leftBits, rightBits, bits);
1974
BigIntegerCalculator
.Subtract(rightBits, NumericsHelpers.Abs(leftSign), bits);
1985
BigIntegerCalculator
.Subtract(leftBits, NumericsHelpers.Abs(rightSign), bits);
1989
else if (
BigIntegerCalculator
.Compare(leftBits, rightBits) < 0)
1994
BigIntegerCalculator
.Subtract(rightBits, leftBits, bits);
2005
BigIntegerCalculator
.Subtract(leftBits, rightBits, bits);
2048
if (bits.Length <= 64 /
BigIntegerCalculator
.BitsPerLimb)
2078
int bitsPerLimb =
BigIntegerCalculator
.BitsPerLimb;
2186
Debug.Assert((uint)bits.Length <= 64 /
BigIntegerCalculator
.BitsPerLimb);
2190
if (
BigIntegerCalculator
.BitsPerLimb == 32 && bits.Length > 1)
2233
if (bits.Length <= 64 /
BigIntegerCalculator
.BitsPerLimb)
2380
if (bits.Length <= 64 /
BigIntegerCalculator
.BitsPerLimb)
2718
return BitwiseOp<
BigIntegerCalculator
.BitwiseAndOp>(in left, in right, zLen);
2728
return BitwiseOp<
BigIntegerCalculator
.BitwiseOrOp>(in left, in right, Math.Max(xLen, yLen) + 1);
2738
return BitwiseOp<
BigIntegerCalculator
.BitwiseXorOp>(in left, in right, Math.Max(xLen, yLen) + 1);
2742
where TOp : struct,
BigIntegerCalculator
.IBitwiseOp
2746
BigIntegerCalculator
.BitwiseOp<TOp>(
2775
(int digitShift, int smallShift) = Math.DivRem(shift,
BigIntegerCalculator
.BitsPerLimb);
2790
: bits[^1] >> (
BigIntegerCalculator
.BitsPerLimb - smallShift);
2808
BigIntegerCalculator
.LeftShiftSelf(zd, smallShift, out nuint carry);
2828
: m >> (
BigIntegerCalculator
.BitsPerLimb - smallShift);
2869
(int digitShift, int smallShift) = Math.DivRem(shift,
BigIntegerCalculator
.BitsPerLimb);
2900
BigIntegerCalculator
.RightShiftSelf(zd, smallShift, out nuint carry);
2937
BigIntegerCalculator
.Add(value._bits, 1, bits);
2946
BigIntegerCalculator
.Subtract(value._bits, 1, bits);
2972
BigIntegerCalculator
.Add(value._bits, 1, bits);
2980
BigIntegerCalculator
.Subtract(value._bits, 1, bits);
3001
BigIntegerCalculator
.Subtract(value._bits, 1, bits);
3010
BigIntegerCalculator
.Add(value._bits, 1, bits);
3051
BigIntegerCalculator
.Multiply(right, NumericsHelpers.Abs(leftSign), bits);
3062
BigIntegerCalculator
.Multiply(left, NumericsHelpers.Abs(rightSign), bits);
3071
BigIntegerCalculator
.Square(left, bits);
3082
BigIntegerCalculator
.Multiply(left, right, bits);
3115
BigIntegerCalculator
.Divide(dividend._bits, NumericsHelpers.Abs(divisor._sign), quotient);
3135
BigIntegerCalculator
.Divide(dividend._bits, divisor._bits, quotient);
3164
nuint remainder =
BigIntegerCalculator
.Remainder(dividend._bits, NumericsHelpers.Abs(divisor._sign));
3178
BigIntegerCalculator
.Remainder(dividend._bits, divisor._bits, bits);
3281
long bitLength = (long)bitsArrayLength *
BigIntegerCalculator
.BitsPerLimb -
3584
BigIntegerCalculator
.RightShiftSelf(zd, nuintSmallShift, out nuint carry);
3589
BigIntegerCalculator
.SwapUpperAndLower(zd, nuintDigitShift);
3593
BigIntegerCalculator
.LeftShiftSelf(zd, nuintSmallShift, out nuint carry);
3598
BigIntegerCalculator
.SwapUpperAndLower(zd, zd.Length - nuintDigitShift);
3612
BigIntegerCalculator
.RightShiftSelf(zd, smallShift32, out nuint carry);
3625
BigIntegerCalculator
.SwapUpperAndLower(words, effectiveDigitShift);
3635
BigIntegerCalculator
.LeftShiftSelf(zd, smallShift32, out _);
3650
BigIntegerCalculator
.SwapUpperAndLower(words, zWordCount - effectiveDigitShift);
3711
&& (leadingZeroCount != bits.Length - 1 || bits[^1] != ((nuint)1 << (
BigIntegerCalculator
.BitsPerLimb - 1))))
3729
BigIntegerCalculator
.RotateLeft(zd, rotateLeftAmount);
3765
result += (uint)
BigIntegerCalculator
.BitsPerLimb;
3799
int result = (bits.Length - 1) *
BigIntegerCalculator
.BitsPerLimb;
3803
result +=
BigIntegerCalculator
.BitsPerLimb - BitOperations.LeadingZeroCount(bits[^1]);
3818
result +=
BigIntegerCalculator
.BitsPerLimb + 1 - BitOperations.LeadingZeroCount(~part);
4035
? (BigInteger)((
BigIntegerCalculator
.BitsPerLimb - 1) ^ BitOperations.LeadingZeroCount((nuint)value._sign | 1))
4036
: (BigInteger)(((long)value._bits.Length *
BigIntegerCalculator
.BitsPerLimb - 1) ^ BitOperations.LeadingZeroCount(value._bits[^1]));
5417
(int digitShift, int smallShift) = Math.DivRem(shiftAmount,
BigIntegerCalculator
.BitsPerLimb);
5456
nuint signBit = (nuint)1 << (
BigIntegerCalculator
.BitsPerLimb - 1);
5506
BigIntegerCalculator
.RightShiftSelf(zd, smallShift, out _);
System\Numerics\BigIntegerCalculator.SquMul.cs (5)
708
BigIntegerCalculator
.Square(p0, r0);
709
BigIntegerCalculator
.Square(p1, r1);
710
BigIntegerCalculator
.Square(pm1, rm1);
711
BigIntegerCalculator
.Square(pm2, rm2);
712
BigIntegerCalculator
.Square(pInf, rInf);