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