OSDN Git Service

2010-02-28 Paolo Carlini <paolo.carlini@oracle.com>
authorpaolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 28 Feb 2010 10:37:04 +0000 (10:37 +0000)
committerpaolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 28 Feb 2010 10:37:04 +0000 (10:37 +0000)
       * src/hash-long-double-aux.cc (hash<long double>::
       operator()(long double)): Hash both -0 and +0 to 0.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@157120 138bc75d-0d04-0410-961f-82ee72b054a4

libstdc++-v3/ChangeLog
libstdc++-v3/src/hash-long-double-aux.cc

index 564f905..ef97ea3 100644 (file)
@@ -1,3 +1,8 @@
+2010-02-28  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       * src/hash-long-double-aux.cc (hash<long double>::
+       operator()(long double)): Hash both -0 and +0 to 0.
+
 2010-02-25  Ed Smith-Rowland  <3dw4rd@verizon.net>
 
        * include/bits/random.tcc (operator<<): Use max_digits10.
index 5b8bbfd..d54d635 100644 (file)
@@ -28,7 +28,9 @@
     size_t
     hash<long double>::operator()(long double __val) const
     {
-      size_t __result = 0;
+      // 0 and -0 both hash to zero.
+      if (__val == 0.0L)
+       return 0;
 
       int __exponent;
       __val = __builtin_frexpl(__val, &__exponent);
@@ -44,7 +46,5 @@
 
       const size_t __coeff = __SIZE_MAX__ / __LDBL_MAX_EXP__;
 
-      __result = __hibits + (size_t)__val + __coeff * __exponent;
-
-      return __result;
+      return __hibits + (size_t)__val + __coeff * __exponent;
     }