?

Average Accuracy: 100.0% → 100.0%
Time: 2.9s
Precision: binary64
Cost: 13056

?

\[\sqrt{1 - x \cdot x} \]
\[\sqrt{-\mathsf{fma}\left(x, x, -1\right)} \]
(FPCore (x) :precision binary64 (sqrt (- 1.0 (* x x))))
(FPCore (x) :precision binary64 (sqrt (- (fma x x -1.0))))
double code(double x) {
	return sqrt((1.0 - (x * x)));
}
double code(double x) {
	return sqrt(-fma(x, x, -1.0));
}
function code(x)
	return sqrt(Float64(1.0 - Float64(x * x)))
end
function code(x)
	return sqrt(Float64(-fma(x, x, -1.0)))
end
code[x_] := N[Sqrt[N[(1.0 - N[(x * x), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]
code[x_] := N[Sqrt[(-N[(x * x + -1.0), $MachinePrecision])], $MachinePrecision]
\sqrt{1 - x \cdot x}
\sqrt{-\mathsf{fma}\left(x, x, -1\right)}

Error?

Derivation?

  1. Initial program 100.0%

    \[\sqrt{1 - x \cdot x} \]
  2. Simplified100.0%

    \[\leadsto \color{blue}{\sqrt{-\mathsf{fma}\left(x, x, -1\right)}} \]
    Proof

    [Start]100.0

    \[ \sqrt{1 - x \cdot x} \]

    sub-neg [=>]100.0

    \[ \sqrt{\color{blue}{1 + \left(-x \cdot x\right)}} \]

    +-commutative [=>]100.0

    \[ \sqrt{\color{blue}{\left(-x \cdot x\right) + 1}} \]

    neg-sub0 [=>]100.0

    \[ \sqrt{\color{blue}{\left(0 - x \cdot x\right)} + 1} \]

    associate-+l- [=>]100.0

    \[ \sqrt{\color{blue}{0 - \left(x \cdot x - 1\right)}} \]

    sub0-neg [=>]100.0

    \[ \sqrt{\color{blue}{-\left(x \cdot x - 1\right)}} \]

    fma-neg [=>]100.0

    \[ \sqrt{-\color{blue}{\mathsf{fma}\left(x, x, -1\right)}} \]

    metadata-eval [=>]100.0

    \[ \sqrt{-\mathsf{fma}\left(x, x, \color{blue}{-1}\right)} \]
  3. Final simplification100.0%

    \[\leadsto \sqrt{-\mathsf{fma}\left(x, x, -1\right)} \]

Alternatives

Alternative 1
Accuracy100.0%
Cost6720
\[\sqrt{1 - x \cdot x} \]
Alternative 2
Accuracy99.5%
Cost448
\[1 + \left(x \cdot x\right) \cdot -0.5 \]
Alternative 3
Accuracy1.6%
Cost64
\[-1 \]
Alternative 4
Accuracy99.0%
Cost64
\[1 \]

Error

Reproduce?

herbie shell --seed 2023151 
(FPCore (x)
  :name "Diagrams.TwoD.Ellipse:ellipse from diagrams-lib-1.3.0.3"
  :precision binary64
  (sqrt (- 1.0 (* x x))))