cpp和javascript中的双算术是否相同?

时间:2017-06-11 05:00:54

标签: javascript c++ hash floating-point floating-accuracy

上下文:我试图将一个哈希函数的实现移植到c ++中,该函数在JavaScript中使用其原始实现中的双重算法。在这个函数中,我们操作的双精度可以非常小而且非常大,并且任何差异都会被放大(故意,因为这是一个散列函数)。

更多详情

  • 出现了什么问题: 与JavaScript版本相比,哈希似乎在cpp版本中产生了不同的结果。       您正在使用什么系统:目前我在Debian上使用节点6.10.2(对于JavaScript)和g ++(Debian 4.9.2-10)运行此系统 4.9.2       我尝试了什么:在一组测试向量上运行哈希。       结果是什么: JS和C ++版本中测试向量的哈希值不同。       我想要的是什么:了解原因,以便我可以使版本兼容或理解它们无法兼容。       更多细节:在JS中我使用Float64Array作为双打,而在C ++中我使用的是双重类型。

问题:在JS和C ++上有双重算术不同?

1 个答案:

答案 0 :(得分:0)

在考虑了上述评论之后,再考虑一下这个问题,我得出浮点计算可以得出的结论:

  • 在不同的语言,架构和实现方面有所不同,
  • 即使所有这些目标共享相同的IEEE754标准。

所以答案是 - 除了做一些严肃的调查和处理(可能是大量特定于目标的)边缘情况之外,没有其他方法可以带来浮点结果(特别是差异放大了一个哈希函数,它使用浮点数)到目标之间的任何类型的连贯协议。

在这种情况下,事实证明这不是一件可怕的事情,甚至可能有一些优点,例如能够根据哈希指纹特定目标。

无论如何,谢谢你的努力。如果可以的话,我会投票给你,欢呼!