Skip to content

[API Proposal]: BigMul for nuint and nint #114731

Open
@MineCake147E

Description

@MineCake147E

Background and motivation

.NET 9 lacks BigMul API for nuint for some reason.
BigMul is useful for implementing something like multiplicative hashing, decoding factoradic with fixed max input value, Lemire's algorithm for generating bounded random integers efficiently, and fast fraction multiplications (necessary for something like MemoryMarshal.Cast<Vector4, Vector3>()).

API Proposal

namespace System
{
    public readonly struct UIntPtr
    {
        public static nuint BigMul(nuint a, nuint b, out nuint low);
    }

    public readonly struct IntPtr
    {
        public static nint BigMul(nint a, nint b, out nint low);
    }
}

API Usage

var sb = new StringBuilder("0.");
var low = ~(nuint)0;
while (low > 0)
{
    sb.Append($"{nuint.BigMul(10, low, out low)}");
}
Console.Out.WriteLine(sb);

Alternative Designs

Risks

None

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions