Average Error: 0.1 → 0.1
Time: 13.9s
Precision: binary32
\[-1 \leq cosTheta_i \land cosTheta_i \leq 1 \land -1 \leq cosTheta_O \land cosTheta_O \leq 1 \land -1 \leq sinTheta_i \land sinTheta_i \leq 1 \land -1 \leq sinTheta_O \land sinTheta_O \leq 1 \land -1.5707964 \leq v \land v \leq 0.1\]
\[e^{\left(\left(\left(\frac{cosTheta_i \cdot cosTheta_O}{v} - \frac{sinTheta_i \cdot sinTheta_O}{v}\right) - \frac{1}{v}\right) + 0.6931\right) + \log \left(\frac{1}{2 \cdot v}\right)}\]
\[\frac{e^{\log \left(\sqrt{e^{0.6931 + \frac{cosTheta_i \cdot cosTheta_O - \left(sinTheta_i \cdot sinTheta_O + 1\right)}{v}} \cdot 0.5}\right)}}{e^{\log \left(\sqrt{v}\right)}} \cdot \sqrt{0.5 \cdot \frac{e^{0.6931 + \frac{cosTheta_i \cdot cosTheta_O - \left(sinTheta_i \cdot sinTheta_O + 1\right)}{v}}}{v}}\]
e^{\left(\left(\left(\frac{cosTheta_i \cdot cosTheta_O}{v} - \frac{sinTheta_i \cdot sinTheta_O}{v}\right) - \frac{1}{v}\right) + 0.6931\right) + \log \left(\frac{1}{2 \cdot v}\right)}
\frac{e^{\log \left(\sqrt{e^{0.6931 + \frac{cosTheta_i \cdot cosTheta_O - \left(sinTheta_i \cdot sinTheta_O + 1\right)}{v}} \cdot 0.5}\right)}}{e^{\log \left(\sqrt{v}\right)}} \cdot \sqrt{0.5 \cdot \frac{e^{0.6931 + \frac{cosTheta_i \cdot cosTheta_O - \left(sinTheta_i \cdot sinTheta_O + 1\right)}{v}}}{v}}
(FPCore (cosTheta_i cosTheta_O sinTheta_i sinTheta_O v)
 :precision binary32
 (exp
  (+
   (+
    (-
     (- (/ (* cosTheta_i cosTheta_O) v) (/ (* sinTheta_i sinTheta_O) v))
     (/ 1.0 v))
    0.6931)
   (log (/ 1.0 (* 2.0 v))))))
(FPCore (cosTheta_i cosTheta_O sinTheta_i sinTheta_O v)
 :precision binary32
 (*
  (/
   (exp
    (log
     (sqrt
      (*
       (exp
        (+
         0.6931
         (/
          (- (* cosTheta_i cosTheta_O) (+ (* sinTheta_i sinTheta_O) 1.0))
          v)))
       0.5))))
   (exp (log (sqrt v))))
  (sqrt
   (*
    0.5
    (/
     (exp
      (+
       0.6931
       (/ (- (* cosTheta_i cosTheta_O) (+ (* sinTheta_i sinTheta_O) 1.0)) v)))
     v)))))
float code(float cosTheta_i, float cosTheta_O, float sinTheta_i, float sinTheta_O, float v) {
	return expf((((((cosTheta_i * cosTheta_O) / v) - ((sinTheta_i * sinTheta_O) / v)) - (1.0f / v)) + 0.6931f) + logf(1.0f / (2.0f * v)));
}
float code(float cosTheta_i, float cosTheta_O, float sinTheta_i, float sinTheta_O, float v) {
	return (expf(logf(sqrtf(expf(0.6931f + (((cosTheta_i * cosTheta_O) - ((sinTheta_i * sinTheta_O) + 1.0f)) / v)) * 0.5f))) / expf(logf(sqrtf(v)))) * sqrtf(0.5f * (expf(0.6931f + (((cosTheta_i * cosTheta_O) - ((sinTheta_i * sinTheta_O) + 1.0f)) / v)) / v));
}

Error

Bits error versus cosTheta_i

Bits error versus cosTheta_O

Bits error versus sinTheta_i

Bits error versus sinTheta_O

Bits error versus v

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Derivation

  1. Initial program 0.1

    \[e^{\left(\left(\left(\frac{cosTheta_i \cdot cosTheta_O}{v} - \frac{sinTheta_i \cdot sinTheta_O}{v}\right) - \frac{1}{v}\right) + 0.6931\right) + \log \left(\frac{1}{2 \cdot v}\right)}\]
  2. Using strategy rm
  3. Applied add-sqr-sqrt_binary320.1

    \[\leadsto \color{blue}{\sqrt{e^{\left(\left(\left(\frac{cosTheta_i \cdot cosTheta_O}{v} - \frac{sinTheta_i \cdot sinTheta_O}{v}\right) - \frac{1}{v}\right) + 0.6931\right) + \log \left(\frac{1}{2 \cdot v}\right)}} \cdot \sqrt{e^{\left(\left(\left(\frac{cosTheta_i \cdot cosTheta_O}{v} - \frac{sinTheta_i \cdot sinTheta_O}{v}\right) - \frac{1}{v}\right) + 0.6931\right) + \log \left(\frac{1}{2 \cdot v}\right)}}}\]
  4. Simplified0.1

    \[\leadsto \color{blue}{\sqrt{0.5 \cdot \frac{e^{0.6931 + \frac{cosTheta_i \cdot cosTheta_O - \left(sinTheta_i \cdot sinTheta_O + 1\right)}{v}}}{v}}} \cdot \sqrt{e^{\left(\left(\left(\frac{cosTheta_i \cdot cosTheta_O}{v} - \frac{sinTheta_i \cdot sinTheta_O}{v}\right) - \frac{1}{v}\right) + 0.6931\right) + \log \left(\frac{1}{2 \cdot v}\right)}}\]
  5. Simplified0.1

    \[\leadsto \sqrt{0.5 \cdot \frac{e^{0.6931 + \frac{cosTheta_i \cdot cosTheta_O - \left(sinTheta_i \cdot sinTheta_O + 1\right)}{v}}}{v}} \cdot \color{blue}{\sqrt{0.5 \cdot \frac{e^{0.6931 + \frac{cosTheta_i \cdot cosTheta_O - \left(sinTheta_i \cdot sinTheta_O + 1\right)}{v}}}{v}}}\]
  6. Using strategy rm
  7. Applied add-exp-log_binary320.1

    \[\leadsto \color{blue}{e^{\log \left(\sqrt{0.5 \cdot \frac{e^{0.6931 + \frac{cosTheta_i \cdot cosTheta_O - \left(sinTheta_i \cdot sinTheta_O + 1\right)}{v}}}{v}}\right)}} \cdot \sqrt{0.5 \cdot \frac{e^{0.6931 + \frac{cosTheta_i \cdot cosTheta_O - \left(sinTheta_i \cdot sinTheta_O + 1\right)}{v}}}{v}}\]
  8. Simplified0.1

    \[\leadsto e^{\color{blue}{\log \left(\sqrt{e^{0.6931 + \frac{cosTheta_i \cdot cosTheta_O - \left(sinTheta_i \cdot sinTheta_O + 1\right)}{v}} \cdot \frac{0.5}{v}}\right)}} \cdot \sqrt{0.5 \cdot \frac{e^{0.6931 + \frac{cosTheta_i \cdot cosTheta_O - \left(sinTheta_i \cdot sinTheta_O + 1\right)}{v}}}{v}}\]
  9. Using strategy rm
  10. Applied associate-*r/_binary320.1

    \[\leadsto e^{\log \left(\sqrt{\color{blue}{\frac{e^{0.6931 + \frac{cosTheta_i \cdot cosTheta_O - \left(sinTheta_i \cdot sinTheta_O + 1\right)}{v}} \cdot 0.5}{v}}}\right)} \cdot \sqrt{0.5 \cdot \frac{e^{0.6931 + \frac{cosTheta_i \cdot cosTheta_O - \left(sinTheta_i \cdot sinTheta_O + 1\right)}{v}}}{v}}\]
  11. Applied sqrt-div_binary320.1

    \[\leadsto e^{\log \color{blue}{\left(\frac{\sqrt{e^{0.6931 + \frac{cosTheta_i \cdot cosTheta_O - \left(sinTheta_i \cdot sinTheta_O + 1\right)}{v}} \cdot 0.5}}{\sqrt{v}}\right)}} \cdot \sqrt{0.5 \cdot \frac{e^{0.6931 + \frac{cosTheta_i \cdot cosTheta_O - \left(sinTheta_i \cdot sinTheta_O + 1\right)}{v}}}{v}}\]
  12. Applied log-div_binary320.1

    \[\leadsto e^{\color{blue}{\log \left(\sqrt{e^{0.6931 + \frac{cosTheta_i \cdot cosTheta_O - \left(sinTheta_i \cdot sinTheta_O + 1\right)}{v}} \cdot 0.5}\right) - \log \left(\sqrt{v}\right)}} \cdot \sqrt{0.5 \cdot \frac{e^{0.6931 + \frac{cosTheta_i \cdot cosTheta_O - \left(sinTheta_i \cdot sinTheta_O + 1\right)}{v}}}{v}}\]
  13. Applied exp-diff_binary320.1

    \[\leadsto \color{blue}{\frac{e^{\log \left(\sqrt{e^{0.6931 + \frac{cosTheta_i \cdot cosTheta_O - \left(sinTheta_i \cdot sinTheta_O + 1\right)}{v}} \cdot 0.5}\right)}}{e^{\log \left(\sqrt{v}\right)}}} \cdot \sqrt{0.5 \cdot \frac{e^{0.6931 + \frac{cosTheta_i \cdot cosTheta_O - \left(sinTheta_i \cdot sinTheta_O + 1\right)}{v}}}{v}}\]
  14. Final simplification0.1

    \[\leadsto \frac{e^{\log \left(\sqrt{e^{0.6931 + \frac{cosTheta_i \cdot cosTheta_O - \left(sinTheta_i \cdot sinTheta_O + 1\right)}{v}} \cdot 0.5}\right)}}{e^{\log \left(\sqrt{v}\right)}} \cdot \sqrt{0.5 \cdot \frac{e^{0.6931 + \frac{cosTheta_i \cdot cosTheta_O - \left(sinTheta_i \cdot sinTheta_O + 1\right)}{v}}}{v}}\]

Reproduce

herbie shell --seed 2021174 
(FPCore (cosTheta_i cosTheta_O sinTheta_i sinTheta_O v)
  :name "HairBSDF, Mp, lower"
  :precision binary32
  :pre (and (<= -1.0 cosTheta_i 1.0) (<= -1.0 cosTheta_O 1.0) (<= -1.0 sinTheta_i 1.0) (<= -1.0 sinTheta_O 1.0) (<= -1.5707964 v 0.1))
  (exp (+ (+ (- (- (/ (* cosTheta_i cosTheta_O) v) (/ (* sinTheta_i sinTheta_O) v)) (/ 1.0 v)) 0.6931) (log (/ 1.0 (* 2.0 v))))))