Skip to content

Commit 535b59a

Browse files
committed
Use BigInteger(ReadOnlySpan<uint> value, bool negative)
1 parent 456bf8e commit 535b59a

File tree

2 files changed

+3
-11
lines changed

2 files changed

+3
-11
lines changed

src/libraries/System.Runtime.Numerics/src/System/Number.BigInteger.cs

+2-10
Original file line numberDiff line numberDiff line change
@@ -326,9 +326,8 @@ private static ParsingStatus NumberToBigInteger(ref NumberBuffer number, out Big
326326
{
327327
// Check for nonzero digits after the decimal point.
328328
ReadOnlySpan<byte> fracDigitsSpan = number.Digits.Slice(intDigits.Length);
329-
for (int i = 0; i < fracDigitsSpan.Length; i++)
329+
foreach (byte digitChar in fracDigitsSpan)
330330
{
331-
char digitChar = (char)fracDigitsSpan[i];
332331
if (digitChar == '\0')
333332
{
334333
break;
@@ -361,14 +360,7 @@ private static ParsingStatus NumberToBigInteger(ref NumberBuffer number, out Big
361360
DivideAndConquer(ref number, intDigits, resultBuffer);
362361
}
363362

364-
resultBuffer = resultBuffer.Slice(0, BigIntegerCalculator.ActualLength(resultBuffer));
365-
Debug.Assert(resultBuffer.Length == 0 || resultBuffer[^1] != 0);
366-
367-
result = resultBuffer.Length == 0
368-
? BigInteger.Zero
369-
: resultBuffer is [uint leading] && (leading <= int.MaxValue || number.IsNegative && leading == unchecked((uint)(int.MaxValue + 1)))
370-
? new BigInteger((int)(number.IsNegative ? -leading : leading))
371-
: new BigInteger(number.IsNegative ? -1 : 1, resultBuffer.ToArray());
363+
result = new BigInteger(resultBuffer, number.IsNegative);
372364

373365
if (resultBufferFromPool != null)
374366
ArrayPool<uint>.Shared.Return(resultBufferFromPool);

src/libraries/System.Runtime.Numerics/src/System/Numerics/BigInteger.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -485,7 +485,7 @@ internal BigInteger(int n, uint[]? rgu)
485485
/// </summary>
486486
/// <param name="value">The absolute value of the number</param>
487487
/// <param name="negative">The bool indicating the sign of the value.</param>
488-
private BigInteger(ReadOnlySpan<uint> value, bool negative)
488+
internal BigInteger(ReadOnlySpan<uint> value, bool negative)
489489
{
490490
if (value.Length > MaxLength)
491491
{

0 commit comments

Comments
 (0)