| Alternative 1 | |
|---|---|
| Error | 9.4 |
| Cost | 296 |
(FPCore (normAngle u n0_i n1_i) :precision binary32 (+ (* (* (sin (* (- 1.0 u) normAngle)) (/ 1.0 (sin normAngle))) n0_i) (* (* (sin (* u normAngle)) (/ 1.0 (sin normAngle))) n1_i)))
(FPCore (normAngle u n0_i n1_i)
:precision binary32
(let* ((t_0
(-
(* -0.16666666666666666 (* n1_i (pow u 3.0)))
(* n1_i (* -0.16666666666666666 u)))))
(+
(* (sin (* (- 1.0 u) normAngle)) (* (/ 1.0 (sin normAngle)) n0_i))
(+
(* t_0 (pow normAngle 2.0))
(+
(* n1_i u)
(*
(-
(* n1_i (* 0.008333333333333333 (pow u 5.0)))
(+ (* -0.16666666666666666 t_0) (* (* n1_i u) 0.008333333333333333)))
(pow normAngle 4.0)))))))float code(float normAngle, float u, float n0_i, float n1_i) {
return ((sinf(((1.0f - u) * normAngle)) * (1.0f / sinf(normAngle))) * n0_i) + ((sinf((u * normAngle)) * (1.0f / sinf(normAngle))) * n1_i);
}
float code(float normAngle, float u, float n0_i, float n1_i) {
float t_0 = (-0.16666666666666666f * (n1_i * powf(u, 3.0f))) - (n1_i * (-0.16666666666666666f * u));
return (sinf(((1.0f - u) * normAngle)) * ((1.0f / sinf(normAngle)) * n0_i)) + ((t_0 * powf(normAngle, 2.0f)) + ((n1_i * u) + (((n1_i * (0.008333333333333333f * powf(u, 5.0f))) - ((-0.16666666666666666f * t_0) + ((n1_i * u) * 0.008333333333333333f))) * powf(normAngle, 4.0f))));
}
real(4) function code(normangle, u, n0_i, n1_i)
real(4), intent (in) :: normangle
real(4), intent (in) :: u
real(4), intent (in) :: n0_i
real(4), intent (in) :: n1_i
code = ((sin(((1.0e0 - u) * normangle)) * (1.0e0 / sin(normangle))) * n0_i) + ((sin((u * normangle)) * (1.0e0 / sin(normangle))) * n1_i)
end function
real(4) function code(normangle, u, n0_i, n1_i)
real(4), intent (in) :: normangle
real(4), intent (in) :: u
real(4), intent (in) :: n0_i
real(4), intent (in) :: n1_i
real(4) :: t_0
t_0 = ((-0.16666666666666666e0) * (n1_i * (u ** 3.0e0))) - (n1_i * ((-0.16666666666666666e0) * u))
code = (sin(((1.0e0 - u) * normangle)) * ((1.0e0 / sin(normangle)) * n0_i)) + ((t_0 * (normangle ** 2.0e0)) + ((n1_i * u) + (((n1_i * (0.008333333333333333e0 * (u ** 5.0e0))) - (((-0.16666666666666666e0) * t_0) + ((n1_i * u) * 0.008333333333333333e0))) * (normangle ** 4.0e0))))
end function
function code(normAngle, u, n0_i, n1_i) return Float32(Float32(Float32(sin(Float32(Float32(Float32(1.0) - u) * normAngle)) * Float32(Float32(1.0) / sin(normAngle))) * n0_i) + Float32(Float32(sin(Float32(u * normAngle)) * Float32(Float32(1.0) / sin(normAngle))) * n1_i)) end
function code(normAngle, u, n0_i, n1_i) t_0 = Float32(Float32(Float32(-0.16666666666666666) * Float32(n1_i * (u ^ Float32(3.0)))) - Float32(n1_i * Float32(Float32(-0.16666666666666666) * u))) return Float32(Float32(sin(Float32(Float32(Float32(1.0) - u) * normAngle)) * Float32(Float32(Float32(1.0) / sin(normAngle)) * n0_i)) + Float32(Float32(t_0 * (normAngle ^ Float32(2.0))) + Float32(Float32(n1_i * u) + Float32(Float32(Float32(n1_i * Float32(Float32(0.008333333333333333) * (u ^ Float32(5.0)))) - Float32(Float32(Float32(-0.16666666666666666) * t_0) + Float32(Float32(n1_i * u) * Float32(0.008333333333333333)))) * (normAngle ^ Float32(4.0)))))) end
function tmp = code(normAngle, u, n0_i, n1_i) tmp = ((sin(((single(1.0) - u) * normAngle)) * (single(1.0) / sin(normAngle))) * n0_i) + ((sin((u * normAngle)) * (single(1.0) / sin(normAngle))) * n1_i); end
function tmp = code(normAngle, u, n0_i, n1_i) t_0 = (single(-0.16666666666666666) * (n1_i * (u ^ single(3.0)))) - (n1_i * (single(-0.16666666666666666) * u)); tmp = (sin(((single(1.0) - u) * normAngle)) * ((single(1.0) / sin(normAngle)) * n0_i)) + ((t_0 * (normAngle ^ single(2.0))) + ((n1_i * u) + (((n1_i * (single(0.008333333333333333) * (u ^ single(5.0)))) - ((single(-0.16666666666666666) * t_0) + ((n1_i * u) * single(0.008333333333333333)))) * (normAngle ^ single(4.0))))); end
\left(\sin \left(\left(1 - u\right) \cdot normAngle\right) \cdot \frac{1}{\sin normAngle}\right) \cdot n0_i + \left(\sin \left(u \cdot normAngle\right) \cdot \frac{1}{\sin normAngle}\right) \cdot n1_i
\begin{array}{l}
t_0 := -0.16666666666666666 \cdot \left(n1_i \cdot {u}^{3}\right) - n1_i \cdot \left(-0.16666666666666666 \cdot u\right)\\
\sin \left(\left(1 - u\right) \cdot normAngle\right) \cdot \left(\frac{1}{\sin normAngle} \cdot n0_i\right) + \left(t_0 \cdot {normAngle}^{2} + \left(n1_i \cdot u + \left(n1_i \cdot \left(0.008333333333333333 \cdot {u}^{5}\right) - \left(-0.16666666666666666 \cdot t_0 + \left(n1_i \cdot u\right) \cdot 0.008333333333333333\right)\right) \cdot {normAngle}^{4}\right)\right)
\end{array}
Results
Initial program 0.9
Simplified4.7
[Start]0.9 | \[ \left(\sin \left(\left(1 - u\right) \cdot normAngle\right) \cdot \frac{1}{\sin normAngle}\right) \cdot n0_i + \left(\sin \left(u \cdot normAngle\right) \cdot \frac{1}{\sin normAngle}\right) \cdot n1_i
\] |
|---|---|
rational_best_oopsla_all_46_json_45_simplify-74 [=>]0.9 | \[ \color{blue}{n0_i \cdot \left(\sin \left(\left(1 - u\right) \cdot normAngle\right) \cdot \frac{1}{\sin normAngle}\right)} + \left(\sin \left(u \cdot normAngle\right) \cdot \frac{1}{\sin normAngle}\right) \cdot n1_i
\] |
rational_best_oopsla_all_46_json_45_simplify-7 [=>]0.9 | \[ \color{blue}{\sin \left(\left(1 - u\right) \cdot normAngle\right) \cdot \left(n0_i \cdot \frac{1}{\sin normAngle}\right)} + \left(\sin \left(u \cdot normAngle\right) \cdot \frac{1}{\sin normAngle}\right) \cdot n1_i
\] |
rational_best_oopsla_all_46_json_45_simplify-74 [=>]0.9 | \[ \sin \left(\left(1 - u\right) \cdot normAngle\right) \cdot \color{blue}{\left(\frac{1}{\sin normAngle} \cdot n0_i\right)} + \left(\sin \left(u \cdot normAngle\right) \cdot \frac{1}{\sin normAngle}\right) \cdot n1_i
\] |
rational_best_oopsla_all_46_json_45_simplify-74 [=>]0.9 | \[ \sin \left(\left(1 - u\right) \cdot normAngle\right) \cdot \left(\frac{1}{\sin normAngle} \cdot n0_i\right) + \color{blue}{n1_i \cdot \left(\sin \left(u \cdot normAngle\right) \cdot \frac{1}{\sin normAngle}\right)}
\] |
rational_best_oopsla_all_46_json_45_simplify-74 [=>]0.9 | \[ \sin \left(\left(1 - u\right) \cdot normAngle\right) \cdot \left(\frac{1}{\sin normAngle} \cdot n0_i\right) + n1_i \cdot \color{blue}{\left(\frac{1}{\sin normAngle} \cdot \sin \left(u \cdot normAngle\right)\right)}
\] |
rational_best_oopsla_all_46_json_45_simplify-7 [=>]4.7 | \[ \sin \left(\left(1 - u\right) \cdot normAngle\right) \cdot \left(\frac{1}{\sin normAngle} \cdot n0_i\right) + \color{blue}{\frac{1}{\sin normAngle} \cdot \left(n1_i \cdot \sin \left(u \cdot normAngle\right)\right)}
\] |
rational_best_oopsla_all_46_json_45_simplify-74 [=>]4.7 | \[ \sin \left(\left(1 - u\right) \cdot normAngle\right) \cdot \left(\frac{1}{\sin normAngle} \cdot n0_i\right) + \frac{1}{\sin normAngle} \cdot \color{blue}{\left(\sin \left(u \cdot normAngle\right) \cdot n1_i\right)}
\] |
Taylor expanded in normAngle around 0 0.5
Simplified0.5
[Start]0.5 | \[ \sin \left(\left(1 - u\right) \cdot normAngle\right) \cdot \left(\frac{1}{\sin normAngle} \cdot n0_i\right) + \left(\left(-0.16666666666666666 \cdot \left(n1_i \cdot {u}^{3}\right) - -0.16666666666666666 \cdot \left(n1_i \cdot u\right)\right) \cdot {normAngle}^{2} + \left(\left(0.008333333333333333 \cdot \left(n1_i \cdot {u}^{5}\right) - \left(-0.16666666666666666 \cdot \left(-0.16666666666666666 \cdot \left(n1_i \cdot {u}^{3}\right) - -0.16666666666666666 \cdot \left(n1_i \cdot u\right)\right) + 0.008333333333333333 \cdot \left(n1_i \cdot u\right)\right)\right) \cdot {normAngle}^{4} + n1_i \cdot u\right)\right)
\] |
|---|---|
rational_best_oopsla_all_46_json_45_simplify-7 [=>]0.5 | \[ \sin \left(\left(1 - u\right) \cdot normAngle\right) \cdot \left(\frac{1}{\sin normAngle} \cdot n0_i\right) + \left(\left(-0.16666666666666666 \cdot \left(n1_i \cdot {u}^{3}\right) - \color{blue}{n1_i \cdot \left(-0.16666666666666666 \cdot u\right)}\right) \cdot {normAngle}^{2} + \left(\left(0.008333333333333333 \cdot \left(n1_i \cdot {u}^{5}\right) - \left(-0.16666666666666666 \cdot \left(-0.16666666666666666 \cdot \left(n1_i \cdot {u}^{3}\right) - -0.16666666666666666 \cdot \left(n1_i \cdot u\right)\right) + 0.008333333333333333 \cdot \left(n1_i \cdot u\right)\right)\right) \cdot {normAngle}^{4} + n1_i \cdot u\right)\right)
\] |
rational_best_oopsla_all_46_json_45_simplify-35 [=>]0.5 | \[ \sin \left(\left(1 - u\right) \cdot normAngle\right) \cdot \left(\frac{1}{\sin normAngle} \cdot n0_i\right) + \left(\left(-0.16666666666666666 \cdot \left(n1_i \cdot {u}^{3}\right) - n1_i \cdot \left(-0.16666666666666666 \cdot u\right)\right) \cdot {normAngle}^{2} + \color{blue}{\left(n1_i \cdot u + \left(0.008333333333333333 \cdot \left(n1_i \cdot {u}^{5}\right) - \left(-0.16666666666666666 \cdot \left(-0.16666666666666666 \cdot \left(n1_i \cdot {u}^{3}\right) - -0.16666666666666666 \cdot \left(n1_i \cdot u\right)\right) + 0.008333333333333333 \cdot \left(n1_i \cdot u\right)\right)\right) \cdot {normAngle}^{4}\right)}\right)
\] |
rational_best_oopsla_all_46_json_45_simplify-7 [=>]0.5 | \[ \sin \left(\left(1 - u\right) \cdot normAngle\right) \cdot \left(\frac{1}{\sin normAngle} \cdot n0_i\right) + \left(\left(-0.16666666666666666 \cdot \left(n1_i \cdot {u}^{3}\right) - n1_i \cdot \left(-0.16666666666666666 \cdot u\right)\right) \cdot {normAngle}^{2} + \left(n1_i \cdot u + \left(\color{blue}{n1_i \cdot \left(0.008333333333333333 \cdot {u}^{5}\right)} - \left(-0.16666666666666666 \cdot \left(-0.16666666666666666 \cdot \left(n1_i \cdot {u}^{3}\right) - -0.16666666666666666 \cdot \left(n1_i \cdot u\right)\right) + 0.008333333333333333 \cdot \left(n1_i \cdot u\right)\right)\right) \cdot {normAngle}^{4}\right)\right)
\] |
rational_best_oopsla_all_46_json_45_simplify-7 [=>]0.5 | \[ \sin \left(\left(1 - u\right) \cdot normAngle\right) \cdot \left(\frac{1}{\sin normAngle} \cdot n0_i\right) + \left(\left(-0.16666666666666666 \cdot \left(n1_i \cdot {u}^{3}\right) - n1_i \cdot \left(-0.16666666666666666 \cdot u\right)\right) \cdot {normAngle}^{2} + \left(n1_i \cdot u + \left(n1_i \cdot \left(0.008333333333333333 \cdot {u}^{5}\right) - \left(-0.16666666666666666 \cdot \left(-0.16666666666666666 \cdot \left(n1_i \cdot {u}^{3}\right) - \color{blue}{n1_i \cdot \left(-0.16666666666666666 \cdot u\right)}\right) + 0.008333333333333333 \cdot \left(n1_i \cdot u\right)\right)\right) \cdot {normAngle}^{4}\right)\right)
\] |
rational_best_oopsla_all_46_json_45_simplify-74 [=>]0.5 | \[ \sin \left(\left(1 - u\right) \cdot normAngle\right) \cdot \left(\frac{1}{\sin normAngle} \cdot n0_i\right) + \left(\left(-0.16666666666666666 \cdot \left(n1_i \cdot {u}^{3}\right) - n1_i \cdot \left(-0.16666666666666666 \cdot u\right)\right) \cdot {normAngle}^{2} + \left(n1_i \cdot u + \left(n1_i \cdot \left(0.008333333333333333 \cdot {u}^{5}\right) - \left(-0.16666666666666666 \cdot \left(-0.16666666666666666 \cdot \left(n1_i \cdot {u}^{3}\right) - n1_i \cdot \left(-0.16666666666666666 \cdot u\right)\right) + \color{blue}{\left(n1_i \cdot u\right) \cdot 0.008333333333333333}\right)\right) \cdot {normAngle}^{4}\right)\right)
\] |
Final simplification0.5
| Alternative 1 | |
|---|---|
| Error | 9.4 |
| Cost | 296 |
| Alternative 2 | |
|---|---|
| Error | 4.4 |
| Cost | 296 |
| Alternative 3 | |
|---|---|
| Error | 4.4 |
| Cost | 296 |
| Alternative 4 | |
|---|---|
| Error | 12.5 |
| Cost | 232 |
| Alternative 5 | |
|---|---|
| Error | 0.6 |
| Cost | 224 |
| Alternative 6 | |
|---|---|
| Error | 17.1 |
| Cost | 32 |
herbie shell --seed 2023090
(FPCore (normAngle u n0_i n1_i)
:name "Curve intersection, scale width based on ribbon orientation"
:precision binary32
:pre (and (and (and (and (<= 0.0 normAngle) (<= normAngle (/ PI 2.0))) (and (<= -1.0 n0_i) (<= n0_i 1.0))) (and (<= -1.0 n1_i) (<= n1_i 1.0))) (and (<= 2.328306437e-10 u) (<= u 1.0)))
(+ (* (* (sin (* (- 1.0 u) normAngle)) (/ 1.0 (sin normAngle))) n0_i) (* (* (sin (* u normAngle)) (/ 1.0 (sin normAngle))) n1_i)))