Alternative 1 | |
---|---|
Error | 0.3 |
Cost | 576 |
\[\frac{x}{x \cdot x + a \cdot a}
\]
(FPCore (x a) :precision binary64 (/ x (+ (pow x 2.0) (pow a 2.0))))
(FPCore (x a) :precision binary64 (/ x (fma a a (* x x))))
double code(double x, double a) { return x / (pow(x, 2.0) + pow(a, 2.0)); }
double code(double x, double a) { return x / fma(a, a, (x * x)); }
function code(x, a) return Float64(x / Float64((x ^ 2.0) + (a ^ 2.0))) end
function code(x, a) return Float64(x / fma(a, a, Float64(x * x))) end
code[x_, a_] := N[(x / N[(N[Power[x, 2.0], $MachinePrecision] + N[Power[a, 2.0], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
code[x_, a_] := N[(x / N[(a * a + N[(x * x), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\frac{x}{{x}^{2} + {a}^{2}}
\frac{x}{\mathsf{fma}\left(a, a, x \cdot x\right)}
Initial program 0.3
Simplified0.3
[Start]0.3 | \[ \frac{x}{{x}^{2} + {a}^{2}}
\] |
---|---|
unpow2 [=>]0.3 | \[ \frac{x}{\color{blue}{x \cdot x} + {a}^{2}}
\] |
unpow2 [=>]0.3 | \[ \frac{x}{x \cdot x + \color{blue}{a \cdot a}}
\] |
Taylor expanded in x around 0 0.3
Simplified0.3
[Start]0.3 | \[ \frac{x}{{x}^{2} + {a}^{2}}
\] |
---|---|
+-commutative [=>]0.3 | \[ \frac{x}{\color{blue}{{a}^{2} + {x}^{2}}}
\] |
unpow2 [=>]0.3 | \[ \frac{x}{\color{blue}{a \cdot a} + {x}^{2}}
\] |
unpow2 [=>]0.3 | \[ \frac{x}{a \cdot a + \color{blue}{x \cdot x}}
\] |
fma-udef [<=]0.3 | \[ \frac{x}{\color{blue}{\mathsf{fma}\left(a, a, x \cdot x\right)}}
\] |
Final simplification0.3
Alternative 1 | |
---|---|
Error | 0.3 |
Cost | 576 |
Alternative 2 | |
---|---|
Error | 47.0 |
Cost | 452 |
Alternative 3 | |
---|---|
Error | 47.0 |
Cost | 452 |
Alternative 4 | |
---|---|
Error | 50.0 |
Cost | 192 |
herbie shell --seed 1
(FPCore (x a)
:name "x/(x^2+a^2)"
:precision binary64
:pre (and (and (<= 1.0 x) (<= x 1000.0)) (and (<= 1.0 a) (<= a 1000.0)))
(/ x (+ (pow x 2.0) (pow a 2.0))))