Average Error: 0.1 → 0.1
Time: 8.2s
Precision: binary64
Cost: 26624
\[0 \leq e \land e \leq 1\]
\[\frac{e \cdot \sin v}{1 + e \cdot \cos v} \]
\[\begin{array}{l} t_0 := e \cdot \cos v\\ \frac{\sin v \cdot \left(e - e \cdot t_0\right)}{1 - {t_0}^{2}} \end{array} \]
(FPCore (e v) :precision binary64 (/ (* e (sin v)) (+ 1.0 (* e (cos v)))))
(FPCore (e v)
 :precision binary64
 (let* ((t_0 (* e (cos v))))
   (/ (* (sin v) (- e (* e t_0))) (- 1.0 (pow t_0 2.0)))))
double code(double e, double v) {
	return (e * sin(v)) / (1.0 + (e * cos(v)));
}
double code(double e, double v) {
	double t_0 = e * cos(v);
	return (sin(v) * (e - (e * t_0))) / (1.0 - pow(t_0, 2.0));
}
real(8) function code(e, v)
    real(8), intent (in) :: e
    real(8), intent (in) :: v
    code = (e * sin(v)) / (1.0d0 + (e * cos(v)))
end function
real(8) function code(e, v)
    real(8), intent (in) :: e
    real(8), intent (in) :: v
    real(8) :: t_0
    t_0 = e * cos(v)
    code = (sin(v) * (e - (e * t_0))) / (1.0d0 - (t_0 ** 2.0d0))
end function
public static double code(double e, double v) {
	return (e * Math.sin(v)) / (1.0 + (e * Math.cos(v)));
}
public static double code(double e, double v) {
	double t_0 = e * Math.cos(v);
	return (Math.sin(v) * (e - (e * t_0))) / (1.0 - Math.pow(t_0, 2.0));
}
def code(e, v):
	return (e * math.sin(v)) / (1.0 + (e * math.cos(v)))
def code(e, v):
	t_0 = e * math.cos(v)
	return (math.sin(v) * (e - (e * t_0))) / (1.0 - math.pow(t_0, 2.0))
function code(e, v)
	return Float64(Float64(e * sin(v)) / Float64(1.0 + Float64(e * cos(v))))
end
function code(e, v)
	t_0 = Float64(e * cos(v))
	return Float64(Float64(sin(v) * Float64(e - Float64(e * t_0))) / Float64(1.0 - (t_0 ^ 2.0)))
end
function tmp = code(e, v)
	tmp = (e * sin(v)) / (1.0 + (e * cos(v)));
end
function tmp = code(e, v)
	t_0 = e * cos(v);
	tmp = (sin(v) * (e - (e * t_0))) / (1.0 - (t_0 ^ 2.0));
end
code[e_, v_] := N[(N[(e * N[Sin[v], $MachinePrecision]), $MachinePrecision] / N[(1.0 + N[(e * N[Cos[v], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
code[e_, v_] := Block[{t$95$0 = N[(e * N[Cos[v], $MachinePrecision]), $MachinePrecision]}, N[(N[(N[Sin[v], $MachinePrecision] * N[(e - N[(e * t$95$0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / N[(1.0 - N[Power[t$95$0, 2.0], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]
\frac{e \cdot \sin v}{1 + e \cdot \cos v}
\begin{array}{l}
t_0 := e \cdot \cos v\\
\frac{\sin v \cdot \left(e - e \cdot t_0\right)}{1 - {t_0}^{2}}
\end{array}

Error

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Derivation

  1. Initial program 0.1

    \[\frac{e \cdot \sin v}{1 + e \cdot \cos v} \]
  2. Applied egg-rr0.1

    \[\leadsto \color{blue}{\frac{e \cdot \sin v}{1 - {\left(e \cdot \cos v\right)}^{2}} \cdot \left(1 - e \cdot \cos v\right)} \]
  3. Simplified0.1

    \[\leadsto \color{blue}{\frac{\sin v \cdot \left(e - e \cdot \left(e \cdot \cos v\right)\right)}{1 - {\left(e \cdot \cos v\right)}^{2}}} \]
    Proof
    (/.f64 (*.f64 (sin.f64 v) (-.f64 e (*.f64 e (*.f64 e (cos.f64 v))))) (-.f64 1 (pow.f64 (*.f64 e (cos.f64 v)) 2))): 0 points increase in error, 0 points decrease in error
    (/.f64 (*.f64 (sin.f64 v) (-.f64 e (Rewrite<= associate-*l*_binary64 (*.f64 (*.f64 e e) (cos.f64 v))))) (-.f64 1 (pow.f64 (*.f64 e (cos.f64 v)) 2))): 0 points increase in error, 0 points decrease in error
    (/.f64 (*.f64 (sin.f64 v) (-.f64 e (*.f64 (Rewrite<= unpow2_binary64 (pow.f64 e 2)) (cos.f64 v)))) (-.f64 1 (pow.f64 (*.f64 e (cos.f64 v)) 2))): 0 points increase in error, 0 points decrease in error
    (/.f64 (*.f64 (sin.f64 v) (-.f64 e (Rewrite<= *-commutative_binary64 (*.f64 (cos.f64 v) (pow.f64 e 2))))) (-.f64 1 (pow.f64 (*.f64 e (cos.f64 v)) 2))): 0 points increase in error, 0 points decrease in error
    (/.f64 (Rewrite<= distribute-rgt-out--_binary64 (-.f64 (*.f64 e (sin.f64 v)) (*.f64 (*.f64 (cos.f64 v) (pow.f64 e 2)) (sin.f64 v)))) (-.f64 1 (pow.f64 (*.f64 e (cos.f64 v)) 2))): 2 points increase in error, 1 points decrease in error
    (/.f64 (Rewrite=> cancel-sign-sub-inv_binary64 (+.f64 (*.f64 e (sin.f64 v)) (*.f64 (neg.f64 (*.f64 (cos.f64 v) (pow.f64 e 2))) (sin.f64 v)))) (-.f64 1 (pow.f64 (*.f64 e (cos.f64 v)) 2))): 0 points increase in error, 0 points decrease in error
    (/.f64 (Rewrite=> distribute-rgt-out_binary64 (*.f64 (sin.f64 v) (+.f64 e (neg.f64 (*.f64 (cos.f64 v) (pow.f64 e 2)))))) (-.f64 1 (pow.f64 (*.f64 e (cos.f64 v)) 2))): 1 points increase in error, 2 points decrease in error
    (/.f64 (*.f64 (sin.f64 v) (+.f64 (Rewrite<= *-rgt-identity_binary64 (*.f64 e 1)) (neg.f64 (*.f64 (cos.f64 v) (pow.f64 e 2))))) (-.f64 1 (pow.f64 (*.f64 e (cos.f64 v)) 2))): 0 points increase in error, 0 points decrease in error
    (/.f64 (*.f64 (sin.f64 v) (+.f64 (*.f64 e 1) (neg.f64 (Rewrite=> *-commutative_binary64 (*.f64 (pow.f64 e 2) (cos.f64 v)))))) (-.f64 1 (pow.f64 (*.f64 e (cos.f64 v)) 2))): 0 points increase in error, 0 points decrease in error
    (/.f64 (*.f64 (sin.f64 v) (+.f64 (*.f64 e 1) (neg.f64 (*.f64 (Rewrite=> unpow2_binary64 (*.f64 e e)) (cos.f64 v))))) (-.f64 1 (pow.f64 (*.f64 e (cos.f64 v)) 2))): 0 points increase in error, 0 points decrease in error
    (/.f64 (*.f64 (sin.f64 v) (+.f64 (*.f64 e 1) (neg.f64 (Rewrite=> associate-*l*_binary64 (*.f64 e (*.f64 e (cos.f64 v))))))) (-.f64 1 (pow.f64 (*.f64 e (cos.f64 v)) 2))): 0 points increase in error, 0 points decrease in error
    (/.f64 (*.f64 (sin.f64 v) (+.f64 (*.f64 e 1) (Rewrite=> distribute-rgt-neg-in_binary64 (*.f64 e (neg.f64 (*.f64 e (cos.f64 v))))))) (-.f64 1 (pow.f64 (*.f64 e (cos.f64 v)) 2))): 0 points increase in error, 0 points decrease in error
    (/.f64 (*.f64 (sin.f64 v) (Rewrite<= distribute-lft-in_binary64 (*.f64 e (+.f64 1 (neg.f64 (*.f64 e (cos.f64 v))))))) (-.f64 1 (pow.f64 (*.f64 e (cos.f64 v)) 2))): 1 points increase in error, 2 points decrease in error
    (/.f64 (*.f64 (sin.f64 v) (*.f64 e (Rewrite<= sub-neg_binary64 (-.f64 1 (*.f64 e (cos.f64 v)))))) (-.f64 1 (pow.f64 (*.f64 e (cos.f64 v)) 2))): 0 points increase in error, 0 points decrease in error
    (/.f64 (Rewrite<= associate-*l*_binary64 (*.f64 (*.f64 (sin.f64 v) e) (-.f64 1 (*.f64 e (cos.f64 v))))) (-.f64 1 (pow.f64 (*.f64 e (cos.f64 v)) 2))): 1 points increase in error, 1 points decrease in error
    (/.f64 (*.f64 (Rewrite<= *-commutative_binary64 (*.f64 e (sin.f64 v))) (-.f64 1 (*.f64 e (cos.f64 v)))) (-.f64 1 (pow.f64 (*.f64 e (cos.f64 v)) 2))): 0 points increase in error, 0 points decrease in error
    (Rewrite<= associate-*l/_binary64 (*.f64 (/.f64 (*.f64 e (sin.f64 v)) (-.f64 1 (pow.f64 (*.f64 e (cos.f64 v)) 2))) (-.f64 1 (*.f64 e (cos.f64 v))))): 1 points increase in error, 1 points decrease in error
  4. Final simplification0.1

    \[\leadsto \frac{\sin v \cdot \left(e - e \cdot \left(e \cdot \cos v\right)\right)}{1 - {\left(e \cdot \cos v\right)}^{2}} \]

Alternatives

Alternative 1
Error0.1
Cost19648
\[e \cdot \frac{\sin v}{\mathsf{fma}\left(e, \cos v, 1\right)} \]
Alternative 2
Error0.1
Cost13376
\[\frac{\sin v \cdot e}{e \cdot \cos v + 1} \]
Alternative 3
Error0.2
Cost13248
\[\frac{\sin v}{\cos v + \frac{1}{e}} \]
Alternative 4
Error0.8
Cost6848
\[\frac{\sin v \cdot e}{e + 1} \]
Alternative 5
Error1.5
Cost6592
\[\sin v \cdot e \]
Alternative 6
Error30.1
Cost1344
\[\frac{e}{v \cdot \left(e \cdot -0.5 + \left(e + 1\right) \cdot 0.16666666666666666\right) + \left(\frac{e}{v} + \frac{1}{v}\right)} \]
Alternative 7
Error30.1
Cost1088
\[\frac{e}{\left(\frac{e}{v} + \frac{1}{v}\right) + v \cdot \left(e \cdot -0.5 + 0.16666666666666666\right)} \]
Alternative 8
Error30.4
Cost960
\[\frac{e}{\left(\frac{e}{v} + \frac{1}{v}\right) + -0.3333333333333333 \cdot \left(v \cdot e\right)} \]
Alternative 9
Error31.2
Cost448
\[\left(v \cdot e\right) \cdot \left(1 - e\right) \]
Alternative 10
Error30.8
Cost448
\[e \cdot \frac{v}{e + 1} \]
Alternative 11
Error31.5
Cost192
\[v \cdot e \]
Alternative 12
Error61.1
Cost64
\[v \]

Error

Reproduce

herbie shell --seed 2022329 
(FPCore (e v)
  :name "Trigonometry A"
  :precision binary64
  :pre (and (<= 0.0 e) (<= e 1.0))
  (/ (* e (sin v)) (+ 1.0 (* e (cos v)))))