我一直在努力解决一个非常简单的问题......我正在使用 AVL 树处理一个 4 维立方体......现在问题是一个与性能相关的问题......基本上我必须比较数十亿个 64 位数字...... (因为我的密钥是 64 位,包括 16 位的 4 个维度)...
问题不在于我无法比较 2 个 64 位数字,而是我需要在尽可能少的时钟周期内进行比较。
不幸的是,我的 AVL 树模板的签名为“int CompareKeyNode(key k,handle h)”
在引擎盖下我有两个 __int64 数字 lhs 和 rhs,不幸的是这个方法的合同是: 1. lhs==rhs return 0 2. lhs > rhs return 1 3. lhs < rhs return -1
现在,如果上述方法需要一个 __int64 数字,我可以简单地做一个 ( METHOD A ) return lhs - rhs;
不幸的是,它只需要一个 32 位整数,所以我不得不求助于类似于 (( METHOD B )) 的东西,即。返回 lhs == rhs ?0 : (lhs < rhs ? -1 : 1)
对我来说,问题是使用 ( METHOD A ) 加载我的数据需要60秒,而 ( METHOD B ) 需要117秒。
不幸的是(方法 A)是不正确的,因为它在转换 lhs-rhs 语句的返回时会丢失精度。
处理时间对我来说至关重要,我相信现在一定有一个简单有效的答案正在逃避我......
有人知道如何解决这个问题吗?或者有什么建议?
我在 VC++(非托管)中工作,但肯定 .NET/Java 必须在 JITing/VM 阶段解决了这个问题......否则它们会受到巨大的性能影响。
PS:已经尝试过 memcmp() 但还不够好...