diff --git a/MagickCore/quantize.c b/MagickCore/quantize.c
index 7346a59..4c7842a 100644
--- a/MagickCore/quantize.c
+++ b/MagickCore/quantize.c
@@ -477,13 +477,17 @@
   alpha_pixel->alpha=(double) pixel->alpha;
 }
 
-static inline Quantum ClampToUnsignedQuantum(const double value)
+static inline Quantum ClampPixel(const MagickRealType value)
 {
-  if (value <= 0.0)
-    return((Quantum) 0);
-  if (value >= QuantumRange)
-    return(QuantumRange);
-  return((Quantum) (value+0.5));
+  if (value < 0.0f)
+    return(0.0f);
+  if (value >= (MagickRealType) QuantumRange)
+    return((Quantum) QuantumRange);
+#if !defined(MAGICKCORE_HDRI_SUPPORT)
+  return((Quantum) (value+0.5f));
+#else
+  return(value);
+#endif
 }
 
 static inline size_t ColorToNodeId(const CubeInfo *cube_info,
@@ -492,11 +496,11 @@
   size_t
     id;
 
-  id=(size_t) (((ScaleQuantumToChar(ClampToUnsignedQuantum(pixel->red)) >> index) & 0x01) |
-    ((ScaleQuantumToChar(ClampToUnsignedQuantum(pixel->green)) >> index) & 0x01) << 1 |
-    ((ScaleQuantumToChar(ClampToUnsignedQuantum(pixel->blue)) >> index) & 0x01) << 2);
+  id=(size_t) (((ScaleQuantumToChar(ClampPixel(pixel->red)) >> index) & 0x01) |
+    ((ScaleQuantumToChar(ClampPixel(pixel->green)) >> index) & 0x01) << 1 |
+    ((ScaleQuantumToChar(ClampPixel(pixel->blue)) >> index) & 0x01) << 2);
   if (cube_info->associate_alpha != MagickFalse)
-    id|=((ScaleQuantumToChar(ClampToUnsignedQuantum(pixel->alpha)) >> index) & 0x1) << 3;
+    id|=((ScaleQuantumToChar(ClampPixel(pixel->alpha)) >> index) & 0x1) << 3;
   return(id);
 }
 
@@ -1462,13 +1466,11 @@
   ssize_t
     offset;
 
-  offset=(ssize_t)
-    (RedShift(ScaleQuantumToChar(ClampToUnsignedQuantum(pixel->red))) |
-    GreenShift(ScaleQuantumToChar(ClampToUnsignedQuantum(pixel->green))) |
-    BlueShift(ScaleQuantumToChar(ClampToUnsignedQuantum(pixel->blue))));
+  offset=(ssize_t) (RedShift(ScaleQuantumToChar(ClampPixel(pixel->red))) |
+    GreenShift(ScaleQuantumToChar(ClampPixel(pixel->green))) |
+    BlueShift(ScaleQuantumToChar(ClampPixel(pixel->blue))));
   if (cube_info->associate_alpha != MagickFalse)
-    offset|=AlphaShift(ScaleQuantumToChar(ClampToUnsignedQuantum(
-      pixel->alpha)));
+    offset|=AlphaShift(ScaleQuantumToChar(ClampPixel(pixel->alpha)));
   return(offset);
 }
 
@@ -1581,11 +1583,11 @@
                 pixel.alpha+=3*previous[u-v].alpha/16;
             }
         }
-      pixel.red=(double) ClampToUnsignedQuantum(pixel.red);
-      pixel.green=(double) ClampToUnsignedQuantum(pixel.green);
-      pixel.blue=(double) ClampToUnsignedQuantum(pixel.blue);
+      pixel.red=(double) ClampPixel(pixel.red);
+      pixel.green=(double) ClampPixel(pixel.green);
+      pixel.blue=(double) ClampPixel(pixel.blue);
       if (cube.associate_alpha != MagickFalse)
-        pixel.alpha=(double) ClampToUnsignedQuantum(pixel.alpha);
+        pixel.alpha=(double) ClampPixel(pixel.alpha);
       i=CacheOffset(&cube,&pixel);
       if (cube.cache[i] < 0)
         {
@@ -1837,11 +1839,11 @@
         if (cube_info->associate_alpha != MagickFalse)
           pixel.alpha+=p->weights[i]*p->error[i].alpha;
       }
-      pixel.red=(double) ClampToUnsignedQuantum(pixel.red);
-      pixel.green=(double) ClampToUnsignedQuantum(pixel.green);
-      pixel.blue=(double) ClampToUnsignedQuantum(pixel.blue);
+      pixel.red=(double) ClampPixel(pixel.red);
+      pixel.green=(double) ClampPixel(pixel.green);
+      pixel.blue=(double) ClampPixel(pixel.blue);
       if (cube_info->associate_alpha != MagickFalse)
-        pixel.alpha=(double) ClampToUnsignedQuantum(pixel.alpha);
+        pixel.alpha=(double) ClampPixel(pixel.alpha);
       i=CacheOffset(cube_info,&pixel);
       if (p->cache[i] < 0)
         {