From 4b8daa32342e426270aca945853934e8e25f0af1 Mon Sep 17 00:00:00 2001 From: giraffedata Date: Sun, 20 Jan 2019 19:23:11 +0000 Subject: 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 --- generator/pgmkernel.c | 4 +++- generator/pgmmake.c | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) (limited to 'generator') 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); -- cgit 1.4.1