#1093633 libnoise0: GradientCoherentNoise3D does not adhere to the domain {-1.0 .. 1.0}

Package:
libnoise0
Source:
libnoise0
Description:
Portable, coherent noise-generating library for C++
Submitter:
Cliff Kilby
Date:
2025-01-20 19:33:02 UTC
Severity:
normal
Tags:
#1093633#5
Date:
2025-01-20 17:17:36 UTC
From:
To:
Dear Maintainer,

I observed out of bounds condition with GradientCoherentNoise3D.

Per source header documentation:
  /// @returns The generated gradient-coherent-noise value.
  ///
  /// The return value ranges from -1.0 to +1.0.

Test cases:
GradientCoherentNoise3D(0.25,-0.45,0.5)=1.00355
GradientCoherentNoise3D(-0.05,-0.45,0.5)=1.00432
GradientCoherentNoise3D(0.3,-0.5,0.5)=1.00751
GradientCoherentNoise3D(0.2,-0.45,0.5)=1.01694
GradientCoherentNoise3D(0,-0.45,0.5)=1.02274
GradientCoherentNoise3D(0.15,-0.45,0.5)=1.02594
GradientCoherentNoise3D(0.05,-0.45,0.5)=1.02919
GradientCoherentNoise3D(0.1,-0.45,0.5)=1.03015
GradientCoherentNoise3D(0.25,-0.5,0.5)=1.03285
GradientCoherentNoise3D(-0.05,-0.5,0.5)=1.03658
GradientCoherentNoise3D(0.2,-0.5,0.5)=1.05275
GradientCoherentNoise3D(0,-0.5,0.5)=1.06107
GradientCoherentNoise3D(0.15,-0.5,0.5)=1.06634
GradientCoherentNoise3D(0.05,-0.5,0.5)=1.07129
GradientCoherentNoise3D(0.1,-0.5,0.5)=1.07279

Expected results:
Return value ranges from -1.0 to +1.0

I contacted the author, who confirmed the source is unmaintained, and
indicated that this may just be a documentation error. But, if anyone built
software based on the documented domain, it will eventually fall beyond the
documented domain. Hence I classified this as "important" and not "normal".

#1093633#10
Date:
2025-01-20 18:23:03 UTC
From:
To:
This appears to be caused by another bug, which I will report separately.

From the headers:
/// A <i>gradient</i>-noise function generates better-quality noise than a
/// <i>value</i>-noise function.  Most noise modules use gradient noise for
/// this reason, although it takes much longer to calculate.
///
/// The return value ranges from -1.0 to +1.0.

Actual test cases: WAAAAAY out of bounds.

GradientNoise3D(0.95,0.9,0.9,0,0,0)=-3.14675
GradientNoise3D(0.95,0.9,0.95,0,0,0)=-3.17288
GradientNoise3D(0.95,0.95,-1,0,0,-2)=1.37768
GradientNoise3D(0.95,0.95,-0.95,0,0,-1)=2.76058
GradientNoise3D(0.95,0.95,-0.9,0,0,-1)=2.78524
GradientNoise3D(0.95,0.95,-0.85,0,0,-1)=2.8099
GradientNoise3D(0.95,0.95,-0.8,0,0,-1)=2.83456
GradientNoise3D(0.95,0.95,-0.75,0,0,-1)=2.85921
GradientNoise3D(0.95,0.95,-0.7,0,0,-1)=2.88387
GradientNoise3D(0.95,0.95,-0.65,0,0,-1)=2.90853
GradientNoise3D(0.95,0.95,-0.6,0,0,-1)=2.93319
GradientNoise3D(0.95,0.95,-0.55,0,0,-1)=2.95785
GradientNoise3D(0.95,0.95,-0.5,0,0,-1)=2.98251
GradientNoise3D(0.95,0.95,-0.45,0,0,-1)=3.00717
GradientNoise3D(0.95,0.95,-0.4,0,0,-1)=3.03183
GradientNoise3D(0.95,0.95,-0.35,0,0,-1)=3.05649
GradientNoise3D(0.95,0.95,-0.3,0,0,-1)=3.08115
GradientNoise3D(0.95,0.95,-0.25,0,0,-1)=3.10581
GradientNoise3D(0.95,0.95,-0.2,0,0,-1)=3.13047
GradientNoise3D(0.95,0.95,-0.15,0,0,-1)=3.15513
GradientNoise3D(0.95,0.95,-0.1,0,0,-1)=3.17979
GradientNoise3D(0.95,0.95,-0.05,0,0,-1)=3.20445

#1093633#15
Date:
2025-01-20 19:31:17 UTC
From:
To:
If Bug#1093642 is fixed by setting the scale to ~0.5, This function stops
generating values anywhere close to -1 .. 1, it appears to fall within
-0.29 .. 0.29
I am working on determining the cause of this side effect, it may result in
a new bug report.