about summary refs log tree commit diff
path: root/generator
diff options
context:
space:
mode:
authorgiraffedata <giraffedata@9d0c8265-081b-0410-96cb-a4ca84ce46f8>2019-01-20 19:23:11 +0000
committergiraffedata <giraffedata@9d0c8265-081b-0410-96cb-a4ca84ce46f8>2019-01-20 19:23:11 +0000
commit4b8daa32342e426270aca945853934e8e25f0af1 (patch)
tree5a9f25739cc003e45a7a5ef8dfbd47c7f8c63c92 /generator
parent6d06b8e0c26536edaedf04ae56849667b85c1325 (diff)
downloadnetpbm-mirror-4b8daa32342e426270aca945853934e8e25f0af1.tar.gz
netpbm-mirror-4b8daa32342e426270aca945853934e8e25f0af1.tar.xz
netpbm-mirror-4b8daa32342e426270aca945853934e8e25f0af1.zip
Fix handling of floating point imprecision in unnormalizing samples
git-svn-id: http://svn.code.sf.net/p/netpbm/code/trunk@3514 9d0c8265-081b-0410-96cb-a4ca84ce46f8
Diffstat (limited to 'generator')
-rw-r--r--generator/pgmkernel.c4
-rw-r--r--generator/pgmmake.c2
2 files changed, 4 insertions, 2 deletions
diff --git a/generator/pgmkernel.c b/generator/pgmkernel.c
index ec634c16..37072c38 100644
--- a/generator/pgmkernel.c
+++ b/generator/pgmkernel.c
@@ -223,11 +223,13 @@ main(int argc, const char * argv[]) {
 
         unsigned int col;
         for (col = 0; col < (cmdline.cols +1) / 2; ++col) {
+            double const epsilon = 1e-15;
             double const dx2 = SQR(col - xcenter);
 
             double const normalized = t(dx2, dy2, cmdline.weight) / 2 / tMax;
 
-            gray const grayval = ROUNDU(cmdline.maxval * (0.5 + normalized));
+            gray const grayval =
+                ROUNDU(cmdline.maxval * (0.5 + normalized + epsilon));
 
             halfKernel[arow][col                   ] = grayval;
             halfKernel[arow][cmdline.cols - col - 1] = grayval;
diff --git a/generator/pgmmake.c b/generator/pgmmake.c
index 3843e316..ae706639 100644
--- a/generator/pgmmake.c
+++ b/generator/pgmmake.c
@@ -117,7 +117,7 @@ main(int argc, const char ** const argv) {
 
     parseCommandLine(argc, argv, &cmdline);
 
-    grayLevel = ROUNDU(cmdline.grayLevel * cmdline.maxval);
+    grayLevel = pgm_unnormalize(cmdline.grayLevel, cmdline.maxval);
 
     pgm_writepgminit(stdout, cmdline.cols, cmdline.rows, cmdline.maxval, 0);