浏览代码

another way to normalize -0 that avoids problems with very small
numbers (adding 1 turns them all into 1)

Roberto Ierusalimschy 18 年之前
父节点
当前提交
ae00b3a76f
共有 1 个文件被更改,包括 3 次插入3 次删除
  1. 3 3
      ltable.c

+ 3 - 3
ltable.c

@@ -1,5 +1,5 @@
 /*
-** $Id: ltable.c,v 2.35 2006/09/11 14:07:24 roberto Exp roberto $
+** $Id: ltable.c,v 2.36 2007/04/10 12:18:17 roberto Exp roberto $
 ** Lua tables (hash)
 ** See Copyright Notice in lua.h
 */
@@ -84,8 +84,8 @@ static const Node dummynode_ = {
 static Node *hashnum (const Table *t, lua_Number n) {
   unsigned int a[numints];
   int i;
-  n += 1;  /* normalize number (avoid -0) */
-  lua_assert(sizeof(a) <= sizeof(n));
+  if (luai_numeq(n, 0))  /* avoid problems with -0 */
+    return gnode(t, 0);
   memcpy(a, &n, sizeof(a));
   for (i = 1; i < numints; i++) a[0] += a[i];
   return hashmod(t, a[0]);