Which is the fastest way to get the absolute value of a number

absolute-value, algorithm, performance, theory

Solution

Conditionals are slower than plain arithmetic operations, but much, much faster than something as silly as calculating the square root.

Rules of thumb from my assembly days:

- Integer or bitwise op: 1 cycle

- Floating-point add/sub/mul: 4 cycles

- Floating-point div: ~30 cycles

- Floating-point exponentiation: ~200 cycles

- Floating-point sqrt: ~60 cycles depending on implementation

- Conditional branch: avg. 10 cycles, better if well-predicted, much worse if mispredicted

Problem

Which is the fastest way to implement an operation that returns the absolute value of a number? ``` x=root(x²) ``` or ``` if !isPositive(x): x=x*(-1) ``` Actually this question can be translated as, how fast is an `if` (and why please). My college programing professors always told me to avoid `if`s for they are extremely slow, but I always forgot to ask how slow and why. Does anybody here know?

Original source

Related problems