From 6a43ed99e67054e0d243c0efb8aeb2685db525c7 Mon Sep 17 00:00:00 2001 From: Matt Pharr Date: Thu, 30 Jan 2025 07:44:19 -0800 Subject: [PATCH] Fix SampleTwoNormal implementation Fixes #481. --- src/pbrt/util/sampling.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/pbrt/util/sampling.h b/src/pbrt/util/sampling.h index e5caf7831..7d4d97215 100644 --- a/src/pbrt/util/sampling.h +++ b/src/pbrt/util/sampling.h @@ -243,9 +243,9 @@ inline Float InvertNormalSample(Float x, Float mu = 0, Float sigma = 1) { } PBRT_CPU_GPU inline Point2f SampleTwoNormal(Point2f u, Float mu = 0, Float sigma = 1) { - Float r2 = -2 * std::log(1 - u[0]); - return {mu + sigma * std::sqrt(r2 * std::cos(2 * Pi * u[1])), - mu + sigma * std::sqrt(r2 * std::sin(2 * Pi * u[1]))}; + Float r2 = -2 * std::log1p(-u[0]); // log(1-u[0]), robustly. + return {mu + sigma * std::sqrt(r2) * std::cos(2 * Pi * u[1]), + mu + sigma * std::sqrt(r2) * std::sin(2 * Pi * u[1])}; } PBRT_CPU_GPU inline Float LogisticPDF(Float x, Float s) {