When performing operations on Lpp numbers there is a very small cost in efficiency to dispatch on the types of numbers that are passed as argments to a number function. For example, in the following
y arguments could be two SmallInteger objects,
a SmallInteger and a BigInteger object, a BigInteger and a
SmallInteger object, a SmallInteger and a Ratio object, a BigInteger
and a Ratio object ... etc See Number Types.
This cost, albeit small, can be completely eliminated by casting specific types on the number arguments 1. This can only work when the program knows absolutely what the specific types of numbers are occurring. For example if in a program segment it is absolutely known that only BigInteger objects are occurring then the following
plus(asThe(BigInteger, x), asThe(BigInteger, y));
would eliminate any dispatching cost.
This situation is rare and it is recommended that the cost is so small in proportion to the algorithms involved that this casting should routinely be avoided; it is simply not worth it.