NAME

    Faster::Maths - make mathematically-intense programs faster

SYNOPSIS

       use Faster::Maths;
    
       # and that's it :)

DESCRIPTION

    This module installs an optimizer into the perl compiler that looks for
    sequences of maths operations that it can make faster.

    When this module is lexically in scope, mathematical expressions
    composed of the four basic operators (+, -, *, /) operating on lexical
    variables and constants will be compiled into a form that is more
    efficient at runtime.

 BUGS

      * Does not currently respect operator overloading. All values will
      get converted into NVs individually, and composed using regular NV
      maths.

      We should recognise the presence of overloading magic on variables
      and fall back to slower-but-correct operation in that case; also
      potentially ignore any OP_CONSTs with magical values.

      https://rt.cpan.org/Ticket/Display.html?id=136453

      * Does not currently retain full integer precision on integer values
      larger than platform float (NV) size. All values will get converted
      to NVs immediately, thus losing the lower bits of precision if the
      value is too large.

      https://rt.cpan.org/Ticket/Display.html?id=136454

TODO

      * Recognise more potential arguments - padrange and package variables
      at least.

      * Recognise more operators - %, unary - and sqrt, possibly other
      unary operators like sin.

      * Store IV/UV constants as values directly in the UNOP_AUX structure
      avoiding the need for SV lookup on them.

      * Back-compatibility to perls older than 5.22.0 by providing an
      UNOP_AUX implementation.

AUTHOR

    Paul Evans <leonerd@leonerd.org.uk>