# HG changeset patch # User John W. Eaton # Date 1403903386 14400 # Node ID 85d04dfdeac3994f9533670b43e4572b5a0eb27b # Parent 4586051a5ff11e2ee5c1b29b171d96b1257a3295# Parent 23e511f3395d858f7f9d63624d642d28b573004c maint: Periodic merge of gui-release to default. diff -r 4586051a5ff1 -r 85d04dfdeac3 libgui/link-deps.mk --- a/libgui/link-deps.mk Fri Jun 27 17:09:28 2014 -0400 +++ b/libgui/link-deps.mk Fri Jun 27 17:09:46 2014 -0400 @@ -7,10 +7,11 @@ endif LIBOCTGUI_LINK_DEPS += \ - @QT_LIBS@ + $(QT_LIBS) \ + $(OPENGL_LIBS) LIBOCTGUI_LINK_OPTS = \ - @QT_LDFLAGS@ + $(QT_LDFLAGS) if AMCOND_LINK_ALL_DEPS LIBOCTGUI_LINK_DEPS += $(LIBOCTINTERP_LINK_DEPS) diff -r 4586051a5ff1 -r 85d04dfdeac3 libinterp/corefcn/data.cc --- a/libinterp/corefcn/data.cc Fri Jun 27 17:09:28 2014 -0400 +++ b/libinterp/corefcn/data.cc Fri Jun 27 17:09:46 2014 -0400 @@ -723,6 +723,8 @@ %!error rem ([1, 2], [3, 4, 5]) %!error rem (i, 1) +# bug 42627 +%!assert (rem (0.94, 0.01), 0.0); */ DEFALIAS (fmod, rem) @@ -874,6 +876,9 @@ ## non-integer real numbers %!assert (mod (2.1, 0.1), 0) %!assert (mod (2.1, 0.2), 0.1, eps) + +# bug 42627 +%!assert (mod (0.94, 0.01), 0.0); */ // FIXME: Need to convert reduction functions of this file for single precision diff -r 4586051a5ff1 -r 85d04dfdeac3 liboctave/numeric/lo-mappers.h --- a/liboctave/numeric/lo-mappers.h Fri Jun 27 17:09:28 2014 -0400 +++ b/liboctave/numeric/lo-mappers.h Fri Jun 27 17:09:46 2014 -0400 @@ -321,33 +321,19 @@ { T q = x / y; - T n = xfloor (q); - - if (X_NINT (y) != y) + if (X_NINT (y) != y + && (std::abs ((q - X_NINT (q)) / X_NINT (q)) + < std::numeric_limits::epsilon ())) + retval = 0; + else { - if (X_NINT (q) == q) - n = q; - else - { - if (x >= -1 && x <= 1) - { - if (std::abs (q - X_NINT (q)) - < std::numeric_limits::epsilon ()) - n = X_NINT (q); - } - else - { - if (std::abs ((q - X_NINT (q))/ X_NINT (q)) - < std::numeric_limits::epsilon ()) - n = X_NINT (q); - } - } + T n = xfloor (q); + + // Prevent use of extra precision. + volatile T tmp = y * n; + + retval = x - tmp; } - - // Prevent use of extra precision. - volatile T tmp = y * n; - - retval = x - tmp; } if (x != y && y != 0 && retval != 0) @@ -368,33 +354,19 @@ { T q = x / y; - T n = xtrunc (q); - - if (X_NINT (y) != y) + if (X_NINT (y) != y + && (std::abs ((q - X_NINT (q)) / X_NINT (q)) + < std::numeric_limits::epsilon ())) + retval = 0; + else { - if (X_NINT (q) == q) - n = q; - else - { - if (x >= -1 && x <= 1) - { - if (std::abs (q - X_NINT (q)) - < std::numeric_limits::epsilon ()) - n = X_NINT (q); - } - else - { - if (std::abs ((q - X_NINT (q))/ X_NINT (q)) - < std::numeric_limits::epsilon ()) - n = X_NINT (q); - } - } + T n = xtrunc (q); + + // Prevent use of extra precision. + volatile T tmp = y * n; + + retval = x - tmp; } - - // Prevent use of extra precision. - volatile T tmp = y * n; - - retval = x - tmp; } if (x != y && y != 0 && retval != 0)