From 4ca856e7117cf6e4bf87301fbb59156ddec5b56e Mon Sep 17 00:00:00 2001 From: Nicolas Mellado <nmellado0@gmail.com> Date: Fri, 26 Mar 2021 10:41:36 +0100 Subject: [PATCH] add constexpr sqrt implementation --- src/libRender/RadiumNBR/SphereSampler.hpp | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/libRender/RadiumNBR/SphereSampler.hpp b/src/libRender/RadiumNBR/SphereSampler.hpp index aa07fa6..253caff 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: -- GitLab