Average Error: 0.1 → 0.1
Time: 1.5s
Precision: binary64
\[\left(\left(aA1 \cdot k\right) \cdot k + aA2 \cdot k\right) + aA3\]
\[aA3 + k \cdot \left(aA1 \cdot k + aA2\right)\]
\left(\left(aA1 \cdot k\right) \cdot k + aA2 \cdot k\right) + aA3
aA3 + k \cdot \left(aA1 \cdot k + aA2\right)
double code(double aA1, double k, double aA2, double aA3) {
	return ((double) (((double) (((double) (((double) (aA1 * k)) * k)) + ((double) (aA2 * k)))) + aA3));
}
double code(double aA1, double k, double aA2, double aA3) {
	return ((double) (aA3 + ((double) (k * ((double) (((double) (aA1 * k)) + aA2))))));
}

Error

Bits error versus aA1

Bits error versus k

Bits error versus aA2

Bits error versus aA3

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Derivation

  1. Initial program 0.1

    \[\left(\left(aA1 \cdot k\right) \cdot k + aA2 \cdot k\right) + aA3\]
  2. Simplified0.1

    \[\leadsto \color{blue}{aA3 + k \cdot \left(aA1 \cdot k + aA2\right)}\]
  3. Final simplification0.1

    \[\leadsto aA3 + k \cdot \left(aA1 \cdot k + aA2\right)\]

Reproduce

herbie shell --seed 2020153 
(FPCore (aA1 k aA2 aA3)
  :name "(+ (+ (* (* aA1 k) k) (* aA2 k)) aA3)"
  :precision binary64
  (+ (+ (* (* aA1 k) k) (* aA2 k)) aA3))