diff --git a/src/libRender/RadiumNBR/SphereSampler.hpp b/src/libRender/RadiumNBR/SphereSampler.hpp index aa07fa63956cf630aacf2794eff84fc4246c1b76..253caff5811f500dbe40b87c20f56c21336ec0e8 100644 --- a/src/libRender/RadiumNBR/SphereSampler.hpp +++ b/src/libRender/RadiumNBR/SphereSampler.hpp @@ -9,12 +9,24 @@ #include <random> namespace RadiumNBR { + +Scalar constexpr sqrtNewtonRaphsonhelper(Scalar x, Scalar curr, Scalar prev) +{ + return curr == prev + ? curr + : sqrtNewtonRaphsonhelper(x, 0.5_ra * (curr + x / curr), curr); +} +Scalar constexpr ct_sqrt(Scalar x){ + return sqrtNewtonRaphsonhelper( x, x, 0_ra ); +} + /// Implements the 2D fibonacci sequence /// (i, N) => [i / phi, i / N] /// where phi = (1 + sqrt(5)) / 2 class NodeBasedRenderer_LIBRARY_API FibonacciSequence { - static constexpr Scalar phi = ( 1_ra + std::sqrt( 5_ra ) ) / 2_ra; + + static constexpr Scalar phi = ( 1_ra + ct_sqrt( 5_ra ) ) / 2_ra; int n; public: