long calculateNewActiveWords(final long location, final long numBytes) {
    if (numBytes == 0) {
      return activeWords;
    }

    try {
      final long byteSize = Words.clampedAdd(Words.clampedAdd(location, numBytes), 31);
      long wordSize = byteSize / 32;
      return Math.max(wordSize, activeWords);
    } catch (ArithmeticException ae) {
      return Long.MAX_VALUE >> 5;
    }
  }
For use in memoryExpansionGasCost() of GasCost. Returns the number of new active words that
accommodate at least the number of specified bytes from the provided memory offset.

<p>Not that this has to return a UInt256 for Gas calculation, in case someone writes code that
require a crazy amount of data. Such allocation should get prohibitive however, and we will end
up with an Out-of-Gas error.

@param location The offset in memory from which we want to accommodate {@code numBytes}.
@param numBytes The minimum number of bytes in memory.
@return The number of active words that accommodate at least the number of specified bytes.
evm/src/main/java/org/hyperledger/besu/evm/frame/Memory.java