public static Number mul(final Number a, final Number b) {
        return mathOperationWithPromote(numberHelper -> numberHelper.mul, false, a, b);
    }
Multiplies two numbers returning the highest common number class between them.

<p>
This method returns a result using the highest common number class between the two inputs.
If an overflow occurs (either integer or floating-point), the method promotes the precision
by increasing the bit width, until a suitable type is found.
If no suitable type exists (e.g., for very large integers beyond 64-bit),
an {@link ArithmeticException} is thrown. For floating-point numbers, if {@code double} overflows,
the result is {@code Double.POSITIVE_INFINITY} or {@code Double.NEGATIVE_INFINITY} instead of an exception.
</p>

<pre>
    a = 1, b = 2 -> 2
    a = null, b = 1 -> null
    a = 1, b = null -> 1
    a = null, b = null -> null
</pre>

@param a should be thought of as the seed to be modified by {@code b}
@param b the modifier to {code a}
gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/util/NumberHelper.java