\[\left(\left(-1 \leq sinTheta_O \land sinTheta_O \leq 1\right) \land \left(-1 \leq h \land h \leq 1\right)\right) \land \left(0 \leq eta \land eta \leq 10\right)\]
\[\sin^{-1} \left(\frac{h}{\sqrt{eta \cdot eta - \frac{sinTheta_O \cdot sinTheta_O}{\sqrt{1 - sinTheta_O \cdot sinTheta_O}}}}\right)
\]
↓
\[\begin{array}{l}
\mathbf{if}\;sinTheta_O \cdot sinTheta_O \leq 0:\\
\;\;\;\;\sin^{-1} \left(\frac{h}{eta}\right)\\
\mathbf{else}:\\
\;\;\;\;\sin^{-1} \left(\frac{h}{\sqrt{\left(sinTheta_O + eta\right) \cdot \left(eta - sinTheta_O\right)}}\right)\\
\end{array}
\]
(FPCore (sinTheta_O h eta)
:precision binary32
(asin
(/
h
(sqrt
(-
(* eta eta)
(/
(* sinTheta_O sinTheta_O)
(sqrt (- 1.0 (* sinTheta_O sinTheta_O)))))))))↓
(FPCore (sinTheta_O h eta)
:precision binary32
(if (<= (* sinTheta_O sinTheta_O) 0.0)
(asin (/ h eta))
(asin (/ h (sqrt (* (+ sinTheta_O eta) (- eta sinTheta_O)))))))
float code(float sinTheta_O, float h, float eta) {
return asinf((h / sqrtf(((eta * eta) - ((sinTheta_O * sinTheta_O) / sqrtf((1.0f - (sinTheta_O * sinTheta_O))))))));
}
↓
float code(float sinTheta_O, float h, float eta) {
float tmp;
if ((sinTheta_O * sinTheta_O) <= 0.0f) {
tmp = asinf((h / eta));
} else {
tmp = asinf((h / sqrtf(((sinTheta_O + eta) * (eta - sinTheta_O)))));
}
return tmp;
}
real(4) function code(sintheta_o, h, eta)
real(4), intent (in) :: sintheta_o
real(4), intent (in) :: h
real(4), intent (in) :: eta
code = asin((h / sqrt(((eta * eta) - ((sintheta_o * sintheta_o) / sqrt((1.0e0 - (sintheta_o * sintheta_o))))))))
end function
↓
real(4) function code(sintheta_o, h, eta)
real(4), intent (in) :: sintheta_o
real(4), intent (in) :: h
real(4), intent (in) :: eta
real(4) :: tmp
if ((sintheta_o * sintheta_o) <= 0.0e0) then
tmp = asin((h / eta))
else
tmp = asin((h / sqrt(((sintheta_o + eta) * (eta - sintheta_o)))))
end if
code = tmp
end function
function code(sinTheta_O, h, eta)
return asin(Float32(h / sqrt(Float32(Float32(eta * eta) - Float32(Float32(sinTheta_O * sinTheta_O) / sqrt(Float32(Float32(1.0) - Float32(sinTheta_O * sinTheta_O))))))))
end
↓
function code(sinTheta_O, h, eta)
tmp = Float32(0.0)
if (Float32(sinTheta_O * sinTheta_O) <= Float32(0.0))
tmp = asin(Float32(h / eta));
else
tmp = asin(Float32(h / sqrt(Float32(Float32(sinTheta_O + eta) * Float32(eta - sinTheta_O)))));
end
return tmp
end
function tmp = code(sinTheta_O, h, eta)
tmp = asin((h / sqrt(((eta * eta) - ((sinTheta_O * sinTheta_O) / sqrt((single(1.0) - (sinTheta_O * sinTheta_O))))))));
end
↓
function tmp_2 = code(sinTheta_O, h, eta)
tmp = single(0.0);
if ((sinTheta_O * sinTheta_O) <= single(0.0))
tmp = asin((h / eta));
else
tmp = asin((h / sqrt(((sinTheta_O + eta) * (eta - sinTheta_O)))));
end
tmp_2 = tmp;
end
\sin^{-1} \left(\frac{h}{\sqrt{eta \cdot eta - \frac{sinTheta_O \cdot sinTheta_O}{\sqrt{1 - sinTheta_O \cdot sinTheta_O}}}}\right)
↓
\begin{array}{l}
\mathbf{if}\;sinTheta_O \cdot sinTheta_O \leq 0:\\
\;\;\;\;\sin^{-1} \left(\frac{h}{eta}\right)\\
\mathbf{else}:\\
\;\;\;\;\sin^{-1} \left(\frac{h}{\sqrt{\left(sinTheta_O + eta\right) \cdot \left(eta - sinTheta_O\right)}}\right)\\
\end{array}