diff --git a/CImg.h b/CImg.h
index c3eaa75ee2288fd68c304705a339fedc4f891c80..d6c28322f6b993a573abff0eae781e57fa219fc7 100644
--- a/CImg.h
+++ b/CImg.h
@@ -7311,22 +7311,25 @@ namespace cimg_library_suffixed {
                                  CImgDisplay::_fitscreen(dx,dy,dz,480,-85,true)
     static unsigned int _fitscreen(const unsigned int dx, const unsigned int dy, const unsigned int dz,
                                    const int dmin, const int dmax, const bool return_y) {
-      const unsigned int _nw = dx + (dz>1?dz:0), _nh = dy + (dz>1?dz:0);
-      unsigned int nw = _nw?_nw:1, nh = _nh?_nh:1;
-      const unsigned int
-        sw = (unsigned int)CImgDisplay::screen_width(),
-        sh = (unsigned int)CImgDisplay::screen_height(),
-        mw = dmin<0?(unsigned int)(sw*-dmin/100):(unsigned int)dmin,
-        mh = dmin<0?(unsigned int)(sh*-dmin/100):(unsigned int)dmin,
-        Mw = dmax<0?(unsigned int)(sw*-dmax/100):(unsigned int)dmax,
-        Mh = dmax<0?(unsigned int)(sh*-dmax/100):(unsigned int)dmax;
-      if (nw<mw) { nh = nh*mw/nw; nh+=(nh==0); nw = mw; }
-      if (nh<mh) { nw = nw*mh/nh; nw+=(nw==0); nh = mh; }
-      if (nw>Mw) { nh = nh*Mw/nw; nh+=(nh==0); nw = Mw; }
-      if (nh>Mh) { nw = nw*Mh/nh; nw+=(nw==0); nh = Mh; }
-      if (nw<mw) nw = mw;
-      if (nh<mh) nh = mh;
-      return return_y?nh:nw;
+      const int
+        u = CImgDisplay::screen_width(),
+        v = CImgDisplay::screen_height();
+      const float
+        mw = dmin<0?cimg::round(u*-dmin/100.0f):(float)dmin,
+        mh = dmin<0?cimg::round(v*-dmin/100.0f):(float)dmin,
+        Mw = dmax<0?cimg::round(u*-dmax/100.0f):(float)dmax,
+        Mh = dmax<0?cimg::round(v*-dmax/100.0f):(float)dmax;
+      float
+        w = (float)std::max(1U,dx),
+        h = (float)std::max(1U,dy);
+      if (dz>1) { w+=dz; h+=dz; }
+      if (w<mw) { h = h*mw/w; w = mw; }
+      if (h<mh) { w = w*mh/h; h = mh; }
+      if (w>Mw) { h = h*Mw/w; w = Mw; }
+      if (h>Mh) { w = w*Mh/h; h = Mh; }
+      if (w<mw) w = mw;
+      if (h<mh) h = mh;
+      return std::max(1U,(unsigned int)cimg::round(return_y?h:w));
     }
 
     //@}