changeset 18907:85d04dfdeac3

maint: Periodic merge of gui-release to default.
author John W. Eaton <jwe@octave.org>
date Fri, 27 Jun 2014 17:09:46 -0400
parents 4586051a5ff1 (current diff) 23e511f3395d (diff)
children c74673161752
files libinterp/corefcn/data.cc
diffstat 3 files changed, 30 insertions(+), 52 deletions(-) [+]
line wrap: on
line diff
--- 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)
--- 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
--- 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<T>::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<T>::epsilon ())
-                    n = X_NINT (q);
-                }
-              else
-                {
-                  if (std::abs ((q - X_NINT (q))/ X_NINT (q))
-                      < std::numeric_limits<T>::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<T>::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<T>::epsilon ())
-                    n = X_NINT (q);
-                }
-              else
-                {
-                  if (std::abs ((q - X_NINT (q))/ X_NINT (q))
-                      < std::numeric_limits<T>::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)